Это звучит как то, что вы ищете Bitwise Operations. Определив для перечисления только один бит для каждого из значений, вы можете выполнить несколько интересных операций, в том числе тот, о котором я думаю, о котором вы спрашиваете. Для того, чтобы определить перечисление использовать, как это вы могли бы использовать что-то вроде следующего:
[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 и все полномочия из двух. Для проверки нескольких значений, которые вы можете использовать:
//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# требует явного приведения в целое, в отличие от C++). Побитовые операции сначала немного сложны, но с небольшой практикой вы должны понять это.
Непонятно, что вы имеете в виду. 'field1' будет * всегда * иметь значение 11, так что вы действительно подразумеваете под первым предложением? Аналогично, во втором фрагменте кода вы используете 'field1', но не говорите, что вы делаете с ним. –
Я передаю его методу, который должен иметь 11 вместо 1, например. Я изменил свой пост ... – grady
Кажется, было бы лучше, если бы вы передали 'myVar'' SomeMethod' и построили для него ключ переключения для обработки разных значений 'myVar'. –