问题描述
|
我只是从F#开始,想知道度量单位:
我知道它们仅在编译时出现,而Reflector确认了这一点:创建不是别名的度量单位将创建具有
MeasureAttribute
属性的类,但除此之外,float<km/h>
表示为普通System.Double
。并且在类型,构造函数参数或属性上没有属性。
到目前为止,我明白了。但是,当我从另一个项目引用编译后的程序集时,它似乎了解所有有关度量单位的信息,包括别名。它如何获得这些信息?他们在集合中的哪儿?
解决方法
F#将“额外类型信息”存储在已编译程序集中的资源中,并且F#编译器知道如何读取该资源。因此,尽管将已区分的并集仅编译为一个类,并且将度量单位擦除为双精度,但是程序集中资源中存在额外的特定于F#的类型信息,以便当F#编译器读取它时,它可以重新构造额外的\“ F#元数据\”。
PowerPack具有元数据读取器,可让您以编程方式对其进行访问。