3

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

[Flags]
public enum someEnum { none, a, b, c, d, e, f, }

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

4

4 回答 4

17

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

[Flags]
enum MyFlags {
  Alpha=1,
  Beta=2,
  Gamma=4,
  Delta=8
}

上面的 [Flags] 是什么意思?

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

var x = MyFlags.Alpha | MyFlags.Beta;

使用 Flags 属性的结果x.ToString()是“ Alpha, Beta”。如果没有该属性,它将是 3。还会更改解析行为。

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

于 2009-08-26T08:11:38.663 回答
1

Flags 属性表示一个枚举可以被视为一个位域;即一组标志。

于 2009-08-26T08:11:14.903 回答
1

Flags 属性实际上只影响枚举中 ToString()、Parse() 和 IsDefined() 方法的行为/输出。

只要您使用两个值的幂,您就可以在不使用 Flags 属性的情况下执行按位运算。

Read this existing question (and answers) for more detailed coverage.

于 2009-08-26T08:20:58.817 回答
0

[Flags]不会改变编译器为每个标识符分配值的方式,无论枚举是否包含标志,确保每个值都是合适的始终是您的责任。

它也不会改变编译器将允许对枚举进行的按位操作。

它所做的是改变Enum.ParseandEnum.ToString方法的行为,以支持值的组合以及单个值,例如"a, b, c".

于 2009-08-26T08:20:09.083 回答