老实说,枚举标志被移除的做法让我有些困惑。
举个例子,假设我们有一个枚举类型如下:
[Flags]
enum Letter
{
A = 1, // 1
B = 2, // 10
C = 4 // 100
}
现在,如果我想让一个变量持有标志
Letter.AB
,我可以这样做foo = Letter.A | Letter.B
。现在这对我来说是有意义的,我可以计算它并且它会有意义: 01
OR 10
= 11 = 3 = 1 + 2 = A + B = AB
当涉及到移除标记时,我感到困惑。然而,直觉告诉我应该使用XOR运算符来做这件事,就像这样:
bar = Letter.A | Letter.B | Letter.C // Set bar to ABC
// Now let's remove everything but Letter.C
bar = bar ^ (Letter.A | Letter.B)
手动计算应该得到以下结果:
111
XOR 011
= 100 = 4 = C = ABC - (A + B) = 7 - (1 + 2)
但是,当人们移除枚举标志时,他们似乎并不会使用异或运算符,而是使用完全没有意义的与运算符。对于使用异或运算符来移除枚举标志,是否存在任何缺点?显然,我没有看到这里的问题,因此一个详细的澄清将非常受欢迎! :)