如何测试按位枚举是否包含来自C#中另一个按位枚举的任何值?

时间:2012-10-20 12:07:10

标签: c# .net enums bit-manipulation

例如。我有以下枚举

[Flags]
public enum Stuff
{
   stuff1=1,
   stuff2=2,
   stuff3=4,
   stuff4=8
}

所以我将mystuff设置为

mystuff = Stuff.stuff1|Stuff.stuff2;

然后我把他的材料设置为

hisstuff = Stuff.stuff2|Stuff.stuff3;

我现在如何测试这些重叠-ie hisstuff和mystuff是否至少包含一个相同的枚举值?

如果有多种方法可以做到最有效率? (这是一场比赛)

2 个答案:

答案 0 :(得分:19)

简单:

if((x & y) != 0) {...}

这是一个按位“和”,然后测试任何交叉点。

答案 1 :(得分:11)

要获取两个值中设置的值,请​​使用and(&)运算符:

mystuff & hisstuff

这为您提供了一个仅包含重叠值的新值,仅在您的示例中为Stuff.stuff2。要检查是否有任何值重叠,请检查它是否为非零:

if ((mystuff & hisstuff) != 0) ...