我使用反射来计算F#中某些有区别的联合的值(例如,如何在F#中枚举一个有区别的联合?).我想使用我从使用反射生成的值来生成不同的记录类型,这些记录类型是由我所枚举的有区别的联合组成的,但我不确定如何将类型UnionCaseInfo转换为实际的联合案例.是否有可能进行这样的演员表演?下面的代码正好代表了我想要做的事情(区别联合中的值是不同的,变量名也是如此).我知道我可以使用枚举,但我宁愿不使用它们而不是歧视的联合.
open System
open Microsoft.FSharp.Collections
open Microsoft.FSharp.Reflection
let GetUnionCaseName (x:'a) =
match FSharpValue.GetUnionFields(x, typeof<'a>) with
| case, _ -> case.Name
type shape =
| Square
| Circle
| Triangle
| Other
type color =
| Black
| Red
| Blue
| Green
| White
type coloredShape = { Shape: shape; Color: color }
let shapeCases = FSharpType.GetUnionCases typeof<shape>
let colorCases = FSharpType.GetUnionCases typeof<color>
let boardOfRelevantPossibilities = Microsoft.FSharp.Collections.Array2D.init<coloredShape> 5 3 (fun x y -> {Shape = Other; Color = …Run Code Online (Sandbox Code Playgroud)