我们可以在 C# 中为 enum 指定一个底层类型,如下所示:
[Flags]
public enum MyKinds : ushort
{
None = 0,
Flag1 = 1 << 0,
Flag2 = 1 << 1,
// ...
}
Run Code Online (Sandbox Code Playgroud)
type MyKinds =
| None = 0
| Flag1 = 1
| Flag2 = 2
// inherit ushort // error FS0912
Run Code Online (Sandbox Code Playgroud)
1 << 0F# 中那样使用按位运算符定义枚举值?type MyKinds =
| None = 0
| Flag1 = 1 << 0 // error FS0010
| Flag2 = 1 << 1 // error FS0010
Run Code Online (Sandbox Code Playgroud)
你不能使用位移位,但这不是更好吗?
type MyKinds =
| None = 0b0000us
| Flag1 = 0b0001us
| Flag2 = 0b0010us
Run Code Online (Sandbox Code Playgroud)
另外,如果将它们用作位标志,您可能需要添加该[<Flag>]属性,以便打印值将显示标志的任意组合。