取消枚举枚举标志

kas*_*rhj 41 c#

考虑

   [Flags]
   public enum State
   {
      IsCool = 0x1,
      SomethingElse = 0x2
   }
Run Code Online (Sandbox Code Playgroud)

我有一个State someState,如果一些表达式的值为true,我想取消设置IsCool的标志someState ,无论它已经被设置或取消的.这意味着我不能真正使用,someState ^= State.IsCool但我可以使用什么呢?

Jon*_*Jon 88

您需要以与设置标志时相反的方式接近此方法:按位和当前状态以及要删除的标志的补码.

someState &= ~State.IsCool;
Run Code Online (Sandbox Code Playgroud)

  • 美丽的。不知道`~` 运算符。 (3认同)
  • 我使用XOR(有条件)时间最长,直到我坐下来,写出一些真值表并发现了AND NOT方法.这么容易多了! (2认同)
  • 有趣的是,微软 [docs](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/enumeration-types) 弄错了 - 他们说 // 使用按位异或删除标志。meetingDays = meetingDays ^ Days.Tuesday; (2认同)