从歧视联盟映射到枚举

Sim*_*nAx 3 enums f# discriminated-union

目前,我正在尝试通过创建一个包含C#GUI层和F#业务层的应用程序来教自己一些F#.在GUI层中,用户在某些时候必须通过选择作为简单枚举的一部分的值来做出选择,例如选择以下任一项:

enum {One, Two, Three}
Run Code Online (Sandbox Code Playgroud)

我编写了一个函数来将枚举值转换为F#区分联合

type MyValues = 
  | One
  | Two
  | Three
Run Code Online (Sandbox Code Playgroud)

现在我必须翻译回来,并且已经厌倦了样板代码.有没有通用的方法将我的歧视联盟翻译成相应的枚举,反之亦然?

干杯,

Tom*_*cek 6

您还可以在F#中定义枚举,并避免完全进行转换:

type MyValues = 
  | One = 0
  | Two = 1
  | Three = 2
Run Code Online (Sandbox Code Playgroud)

= <num>位告诉F#编译器它应该将类型编译为union.使用C#中的类型时,这将显示为完全正常的枚举.唯一的危险是来自C#的人可以调用你的代码(MyValues)4,这将编译,但是如果你match在F#中使用它会导致不完整的模式匹配异常.