这是我如何设置我的标志:
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 };