Вот как я бы установил свои флаги:
Mode = 0;
for(int i = 0; i < args.Length; i++) {
switch(args[i]) {
case "--a":
Mode |= Flags.A;
break;
case "--b":
Mode |= Flags.B;
break;
}
}
Если оба флага включены по умолчанию, я думаю, что имеет смысл изменить параметры командной строки на что-то вроде --not-a
и --not-b
. Это будет отражать настройки по умолчанию и позволит вам избавиться от (Mode & Flags.A) == Flags.A && (Mode & Flags.B) == Flags.B
, что довольно уродливо, ИМХО.
Тогда вы можете установить свои флаги так:
Mode = Flags.A | Flags.B;
for(int i = 0; i < args.Length; i++) {
switch(args[i]) {
case "--not-a":
Mode &= ~Flags.A;
break;
case "--not-b":
Mode &= ~Flags.B;
break;
}
}
Наконец, если у вас много флагов (вместо двух), может быть проще настроить перечисление следующим образом:
[Flags]
enum Flags
{
A = 1,
B = 1 << 1,
C = 1 << 2,
D = 1 << 3,
E = 1 << 4,
F = 1 << 5
};