【发布时间】:2017-05-06 10:13:06
【问题描述】:
鉴于这两个有区别的联合,我想从案例实例中获取DeclaringType。
type SingleCaseUnion =
| One
type MultiCaseUnion =
| Two
| Three
每种情况的示例如下:
getDiscriminatedUnionType One = typeof<SingleCaseUnion> // true
getDiscriminatedUnionType Three = typeof<MultiCaseUnion> // true
我的第一次尝试是获取案例类型并获取它的基类,这是因为在 F# 中为每个案例创建了一个子类型。
MultiCaseUnion.Two.GetType().BaseType = typeof<MultiCaseUnion> // true
但是,对于单个 case 联合,这不起作用,因为没有创建嵌套类型。
SingleCaseUnion.One.GetType().BaseType = typeof<SingleCaseUnion> // false
我的第二次尝试是使用 FSharp Reflection 助手,旨在获得更强大的解决方案。
FSharpType.GetUnionCases(unionValue.GetType()).First().DeclaringType
这对所有情况都有效,但它必须为每种情况生成 UnionCaseInfo 实例,这似乎有些不必要。
是否有一些我可能错过的内置功能?比如:
FSharpValue.GetUnionFromCase(SingleCaseUnion.One)
【问题讨论】:
标签: reflection f# discriminated-union