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

Detecting F# record type from C# at runtime

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

记录类型在编译时用 [<CompilationMapping(SourceConstructFlags.RecordType)>] 属性标记。这就是 FSharpType.IsRecord 寻找的内容,您可以查看实现 here。被歧视的工会以类似的方式得到标记。

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