C#enum标志必须是顺序的

Mat*_*ord 7 .net c# enums

在C#中,枚举标志必须是顺序的吗?或者你能留下空白吗?并仍然执行逐位比较?即,你能做到以下几点:

[Flags]
public enum MyEnum
{
    None = 0,
    IsStarred = 1,
    IsDone = 128
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 7

没有什么要求它们是顺序的.

你的枚举定义很好,编译时没有问题.

然而,可读性问题和最不惊讶的原则已经大大受损......


Mar*_*lon 5

您发布的代码没有任何问题.这绝对没问题:

[Flags]
public enum MyEnum
{
    None = 0,
    IsStarred = 1,
    IsDone = 128
}
Run Code Online (Sandbox Code Playgroud)

这是这样的:

[Flags]
public enum MyEnum
{
    IsStarred = 1,
    IsDone = 128
    None = 0,
    SomethingElse = 4,
}
Run Code Online (Sandbox Code Playgroud)

请记住,FlagsAttribute不会将您的值强制为位掩码.