如何在 F# 中为枚举指定基础类型

itm*_*nus 0 c# f# .net-core

我们可以在 C# 中为 enum 指定一个底层类型,如下所示:

[Flags]
public enum MyKinds : ushort
{
    None  = 0,
    Flag1 = 1 << 0,
    Flag2 = 1 << 1,
    // ...
}
Run Code Online (Sandbox Code Playgroud)
  1. 我怎样才能使用 F# 做到这一点?
type MyKinds = 
    | None  = 0 
    | Flag1 = 1
    | Flag2 = 2

    // inherit ushort  // error FS0912
Run Code Online (Sandbox Code Playgroud)
  1. 如何像1 << 0F# 中那样使用按位运算符定义枚举值?
type MyKinds = 
    | None = 0 
    | Flag1 = 1 << 0    // error FS0010
    | Flag2 = 1 << 1    // error FS0010
Run Code Online (Sandbox Code Playgroud)

Ben*_*erg 7

你不能使用位移位,但这不是更好吗?

type MyKinds = 
    | None =  0b0000us
    | Flag1 = 0b0001us
    | Flag2 = 0b0010us
Run Code Online (Sandbox Code Playgroud)

另外,如果将它们用作位标志,您可能需要添加该[<Flag>]属性,以便打印值将显示标志的任意组合。