根据我的代码 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]
意思是什么?
根据我的代码 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]
意思是什么?
您可以为枚举指定值,这是标志情况所必需的:
[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(对我来说是新闻)。
Flags 属性表示一个枚举可以被视为一个位域;即一组标志。
Flags 属性实际上只影响枚举中 ToString()、Parse() 和 IsDefined() 方法的行为/输出。
只要您使用两个值的幂,您就可以在不使用 Flags 属性的情况下执行按位运算。
Read this existing question (and answers) for more detailed coverage.
[Flags]
不会改变编译器为每个标识符分配值的方式,无论枚举是否包含标志,确保每个值都是合适的始终是您的责任。
它也不会改变编译器将允许对枚举进行的按位操作。
它所做的是改变Enum.Parse
andEnum.ToString
方法的行为,以支持值的组合以及单个值,例如"a, b, c"
.