c# – 如何删除项目为OR’d枚举?

我有一个枚举如:

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

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

如何从变量颜色中删除蓝色?

你需要&它与’蓝色’的〜(补)。

补码运算符基本上反转或“翻转”给定数据类型的所有位。因此,如果使用具有某个值(让我们调用该值’X’)和一个或多个设置位的补码(我们称之为那些位Q和它们的补码〜Q)的AND运算符(& & 〜Q清除从X中设置的任何位,并返回结果。

因此,要删除或清除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中的所有位

http://stackoverflow.com/questions/4778166/how-to-remove-an-item-for-a-ord-enum

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 如何删除项目为OR’d枚举?