关于Enum操作

时间:2011-09-09 05:13:48

标签: c# enums

我有一个像

这样的枚举
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! *

* 谢谢大家。 (^^メ) *

2 个答案:

答案 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 > 0t1 & Test.A = -2 & -2 = -2 < 0