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

Jim*_*yrd 5 .net c# f# system.reflection

有没有办法在C#中检查对象是否是运行时的F#记录类型而不引用FSharp.Core库?

scr*_*wtp 8

记录类型[<CompilationMapping(SourceConstructFlags.RecordType)>]在编译时标记为属性.这是FSharpType.IsRecord寻找的,你可以在这里看到实现.受歧视的工会以类似的方式得到标记.

可以在不FSharp.Core明确引用任何类型的情况下重新实现该逻辑,即您可以按名称查找属性并拥有自己的SourceConstructFlags枚举副本以匹配属性数据.

  • @Tarmil:确实是这样,即使是Newtonsoft.Json(我假设确实重新实现了一些“ FSharp.Core”逻辑以避免依赖)也实际上确实动态加载了“ FSharp.Core”以重用反射代码,请参阅[此处] (https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Utilities/FSharpUtils.cs)。 (2认同)