Об операции Enum - PullRequest
       1

Об операции Enum

2 голосов
/ 09 сентября 2011

У меня есть перечисление как

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);

Спасибо ....

UPDATE:

Спасибо за ваш комментарий, и хороший дизайн ...

* Я думаю, что я изменю плохой дизайн как сынна так быстро !! *

* Спасибо вам всем тоже самое. (^^ メ) *

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Чтобы это работало, вы должны убедиться, что значения enum устанавливают разные биты, так как вы выполняете операцию побитового ввода. Попробуйте определить тест как этот

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
}
2 голосов
/ 09 сентября 2011

Причина в том, что Test.A | Test.E оценивается как -2 | 2 = -2, поэтому t1 == Test.A.

Сейчас t1 & Test.E = -2 & 2 = 2 > 0 и t1 & Test.A = -2 & -2 = -2 < 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...