enum Test
{
X = 1,
Y = 1 << 1,
Z = 1 << 2,
All = ~0
}
将Test.All
生成为按位的标志,无论稍后会在Test
添加多少个值?例如,如果添加了新值:
enum Test
{
X = 1,
Y = 1 << 1,
Z = 1 << 2,
W = 1 << 3,
WAndZ = W | Z,
All = ~0
}
是否保证Test.All
将始终包含所有其他值?
答案 0 :(得分:1)
是的,按位,此枚举值将包含所有其他值。这意味着这样的测试:
(Test.All & Test.X) == Test.X
将对此枚举的所有成员求值为true(即使X
的整数值为0
)。
同样,您可以(并且应该)拥有0
的默认值,当与其他标志匹配时,它将评估为false:
enum Test
{
None = 0, // no flags
X = 1,
Y = 2,
Z = 4,
...
All = ~0 // all flags
}
这意味着All
将包含所有标志,None
将不包含任何标志:
Debug.Assert((Test.All & Test.None) == Test.None);
Debug.Assert((Test.All & Test.X) == Test.X);
Debug.Assert((Test.All & Test.All) == Test.All);
Debug.Assert((Test.None & Test.None) == Test.None);
Debug.Assert((Test.None & Test.X) == Test.None);
Debug.Assert((Test.None & Test.All) == Test.None);