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

如何测试一个位枚举是否包含C#中另一个位枚举的任何值?,c#,.net,enums,bit-manipulation,C#,.net,Enums,Bit Manipulation,比如说。我有下面的枚举 [Flags] public enum Stuff { stuff1=1, stuff2=2, stuff3=4, stuff4=8 } 所以我决定 mystuff = Stuff.stuff1|Stuff.stuff2; 然后我把他的东西调好 hisstuff = Stuff.stuff2|Stuff.stuff3; 我现在如何测试这些重叠(即Histuff和mystuff)是否都包含至少一个相同的枚举值 如果有多种方法,哪种方法最有效?(

比如说。我有下面的枚举

[Flags]
public enum Stuff
{
   stuff1=1,
   stuff2=2,
   stuff3=4,
   stuff4=8
}
所以我决定

mystuff = Stuff.stuff1|Stuff.stuff2;
然后我把他的东西调好

hisstuff = Stuff.stuff2|Stuff.stuff3;
我现在如何测试这些重叠(即Histuff和mystuff)是否都包含至少一个相同的枚举值

如果有多种方法,哪种方法最有效?(这是一款游戏)

简单:

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

这将执行按位“and”,然后测试任何交点。

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

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

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