我一直在研究一种语言,但就.NET集成而言,到目前为止,我只是设法使原始类型工作。昨晚我有一个好主意 - 而不是试图弄清楚在类型检查期间元组,模块和函数的确切System.Type
是什么,我可以做的是获得System.Type
System.Object
并添加一些与我自己的复杂语言类型相对应的元数据。重要的不是我要添加元数据的确切System.Type
,但是我的语言中每个类型的替换都是彼此不同的。
我需要这个的原因是我使用反射命名空间中的函数进行集成,这涉及到System.Type
s。{/ p>
type SpiralType =
| IntT
| StringT
| TupleT of SpiralType list
作为一个例子,我想要添加到System.Type
的是上述F#区别联合类型的实例,以确保唯一性。
这样做的最佳方式是什么?
答案 0 :(得分:0)
使用.NET中的额外数据来扩充类型信息的标准方法是使用属性,尽管属性构造函数参数通常仅限于可以表示为文字的值。这可能是也可能不是您的问题,具体取决于您的元数据的丰富程度。 DU可能不会起作用。
否则,一个简单的解决方案是将您的值与任意元数据一起包装成通用类型,即
type TypeWithMetadata<'typ, 'metadata>(value: 'typ, metadata: 'metadata) =
member this.Value = value
member this.Metadata = metadata
虽然这可能会带来你想要避免的开销吗?