小编Pre*_*pal的帖子

使用反射而不是枚举的F#辨别联合枚举

我使用反射来计算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)

f# f#-3.0

5
推荐指数
1
解决办法
1290
查看次数

标签 统计

f# ×1

f#-3.0 ×1