如果按顺序声明[Flags]枚举会怎样?

Tan*_*ing 5 c# enum-flags

我遇到过这个问题:[Flags]枚举属性在C#中意味着什么?

有一点我一直想知道,使用接受的答案的例子,如果我宣布会发生什么:

[Flags]
public enum MyColors
{
    Yellow = 1,
    Green = 2,
    Red = 3,
    Blue = 4
}
Run Code Online (Sandbox Code Playgroud)

该示例中的以下步骤是否会导致错误?如果不是,我怎样才能进入MyColors.Red?

jmc*_*ney 9

Flags属性实际上并没有做任何事情来枚举自己或影响它在代码中的使用方式.Flags属性唯一影响的是ToString方法的输出.Flags属性的另一个目的是向开发人员指明他们应该如何使用枚举.你的例子不会导致任何错误; 这只是愚蠢的代码.规则很简单:

  1. 如果一次只应使用一个值,则不应用Flags属性并对该类型使用单数名称.
  2. 如果可以一起使用多个值,则应用Flags属性,对值使用幂2,并为该类型使用复数名称.


Sri*_*vel 1

这将会带来意想不到的结果。保持唯一性的常见做法就是用 2 的幂来标记枚举值。

例如Yellow按位或Green将导致Red等等。

MyColors colors = MyColors.Yellow | MyColors.Green;
if (colors == MyColors.Red)
{
    Console.WriteLine("Oops!")
}
Run Code Online (Sandbox Code Playgroud)

另请注意,Flags属性在这里不执行任何操作,它给人的印象是您可以使用按位或