小编典典

如何删除 OR'd 枚举的项目?

all

我有一个像这样的枚举:

public enum Blah
{
    RED = 2,
    BLUE = 4,
    GREEN = 8,
    YELLOW = 16
}

Blah colors = Blah.RED | Blah.BLUE | Blah.YELLOW;

如何从可变颜色中去除蓝色?


阅读 159

收藏
2022-06-23

共1个答案

小编典典

您需要&使用~“蓝色”的(补码)。

补码运算符基本上反转或“翻转”给定数据类型的所有位。因此,如果您将AND运算符 ( &)
与某个值(我们称该值“X”)和一个或多个设置位的补码(我们称这些位Q及其补码~Q)一起使用,则该语句将X & ~Q清除在QX并返回结果。

因此,要删除或清除这些BLUE位,请使用以下语句:

colorsWithoutBlue = colors & ~Blah.BLUE
colors &= ~Blah.BLUE // This one removes the bit from 'colors' itself

您还可以指定多个位来清除,如下所示:

colorsWithoutBlueOrRed = colors & ~(Blah.BLUE | Blah.RED)
colors &= ~(Blah.BLUE | Blah.RED) // This one removes both bits from 'colors' itself

或交替…

colorsWithoutBlueOrRed = colors & ~Blah.BLUE & ~Blah.RED
colors &= ~Blah.BLUE & ~Blah.RED // This one removes both bits from 'colors' itself

所以总结一下:

  • X | Q设置位Q
  • X & ~Q清除位Q
  • ~X翻转/反转所有位X
2022-06-23