假设我有以下类型:
type BinaryOp =
{ Lhs: int
Rhs: int
Destination: int }
Run Code Online (Sandbox Code Playgroud)
是否有 F# 方法来计算该记录的成员,即countMembers<BinaryOp> = 3?我知道我可以使用,System.Reflection但我宁愿不使用。
我认为不依赖 .NET 反射机制就没有办法做到这一点。但是,核心 F# 库在 .NET 反射之上提供了一个方便的 API,用于处理 F# 类型。您可以countMembers使用 F# 反射 API 实现,如下所示:
open Microsoft.FSharp.Reflection
let countMembers<'T> =
FSharpType.GetRecordFields(typeof<'T>).Length
Run Code Online (Sandbox Code Playgroud)
我不确定您为什么要这样做,或者为什么要避免反射 - 也许对于您实际想要实现的目标有完全不同的设计 - 但是如果您需要计算记录中的字段数,这是最好的方法。