旗帜枚举混乱C#

3 c# enums attributes enum-flags

根据我的代码a = 1,b = 2,c = 3等我认为该标志会使a = 1,b = 2,c = 4等

[Flags]
public enum someEnum { none, a, b, c, d, e, f, }
Run Code Online (Sandbox Code Playgroud)

我如何得到我的意图(c = 4,e = 8)?[Flags]上面的意思是什么?

Ric*_*ard 17

您可以为枚举指定值,这是标志情况所需的:

[Flags]
enum MyFlags {
  Alpha=1,
  Beta=2,
  Gamma=4,
  Delta=8
}
Run Code Online (Sandbox Code Playgroud)

[Flags]的意思是什么?

这意味着运行时将支持对值的按位运算.它对编译器生成的值没有任何影响.例如,如果你这样做

var x = MyFlags.Alpha | MyFlags.Beta;
Run Code Online (Sandbox Code Playgroud)

使用Flags属性结果x.ToString()为" Alpha, Beta".没有属性,它将是3.也改变解析行为.

编辑:更新了更好的名称,并且编译器不会在非标记属性上使用按位操作,至少不是C#3或4(对我来说是新闻).

  • 顺便说一句,对于这种用法,建议还包括一个`None = 0,`条目(或类似) (3认同)