我有一个像
这样的枚举enum Test
{
A = -2,
B = -1 ,
C = 0 ,
D = 1 ,
E = 2
}
并且,如何判断枚举值是否为合并枚举值
class Program
{
static void Main(string[] args)
{
Test t1 = Test.A | Test.E;
Console.WriteLine((t1 & Test.E) > 0); // true
Console.WriteLine((t1 & Test.A) > 0); // why this is false ?
Console.ReadKey();
}
}
我想问一下,为什么
Test t1 = Test.A | Test.E;
但是
Console.WriteLine((t1 & Test.A) > 0);
...谢谢
更新
感谢您的评论和良好的设计......
* 我想我会尽快改变糟糕的设计作为sonn! *
* 谢谢大家。 (^^メ) *
答案 0 :(得分:3)
要使其工作,您必须确保枚举值设置不同的位,因为您正在执行按位和操作。尝试像这样定义测试
enum Test
{
A = 1,
B = 2,
C = 4,
D = 8,
E = 16
}
可替换地。
[Flags]
enum Test
{
A = 0x1,
B = 0x2,
C = 0x4,
D = 0x8,
E = 0x10
}
答案 1 :(得分:2)
原因是Test.A | Test.E
评估为-2 | 2 = -2
,因此t1 == Test.A
。
现在t1 & Test.E = -2 & 2 = 2 > 0
和
t1 & Test.A = -2 & -2 = -2 < 0