在运行时从C#中检测F#记录类型

6

有没有一种方法可以在运行时检查C#中的对象是否为F#记录类型,而不需要引用FSharp.Core库?


为什么不直接引用 FSharp.Core - scrwtp
1
因为为了基本上一个函数而向库添加依赖关系是过度设计和使另一个库的依赖树膨胀。 - Jimmy_Byrd
没错,但如果你已经关心识别 F# 记录,那么你可能需要那个依赖项。 - scrwtp
1个回答

8
记录类型在编译时会被标记为[<CompilationMapping(SourceConstructFlags.RecordType)>]属性。这就是FSharpType.IsRecord查找的内容,您可以在此处查看实现here。判别联合也以类似的方式标记。
可以重新实现该逻辑而不显式引用任何FSharp.Core类型,即可以通过名称查找属性并拥有自己的SourceConstructFlags枚举来匹配属性数据。

我基本上得出了这个结论。我更多地是在想是否已经有人做过这件事。谢谢! - Jimmy_Byrd
考虑到很少有人在不引用FSharp.Core的情况下使用F#库,我会认为人们只是使用FSharpType.IsRecord - Tarmil
2
@Tarmil:这确实是真的,即使是我认为重新实现了一些FSharp.Core逻辑以避免依赖关系的Newtonsoft.Json,实际上也会动态加载FSharp.Core以重用反射代码,请参见此处 - scrwtp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接