Звучит так, как будто вы ищете Побитовые операции .Определив в вашем перечислении только один бит для каждого из значений, вы можете выполнить несколько интересных операций, включая ту, о которой, я думаю, вы спрашиваете.Чтобы определить перечисление для использования таким образом, вы можете использовать что-то вроде следующего:
[Flags]
enum myEnum :int
{
None = 0,
field1 = (1 << 0), //1 binary: 001
field2 = (1 << 1), //2 010
field3 = (1 << 2), //4 100
anyfield = (1 << 3) -1, // 111
field1or2 = (field1 | field2),// 011
field1or3 = (field1 | field3),// 101
field2or3 = (field2 | field3), 110
}
Синтаксис для инициализации значений перечисления приведен для того, чтобы упростить просмотр списка и увидеть, что именнобит установлен и все полномочия двух используются.Чтобы проверить наличие нескольких значений, вы можете использовать:
//set to field2or3
myEnum myvar = myEnum.field2or3;
//add in field1
myvar |= myEnum.field1;
//clear field2
myvar &= myEnum.field2;
//true because field1 is set, even though field2 is not
if ((myvar & myEnum.field1or2) != myEnum.None)
{
//...
}
или
if((myvar & (int)myEnum.field1or2) != 0)
, если myvar является int (C # требует явного приведения к int, в отличие от C ++).Побитовые операции поначалу немного сложны, но с небольшой практикой вы сможете понять это.