例如。我有以下枚举
[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是否至少包含一个相同的枚举值?
如果有多种方法可以做到最有效率? (这是一场比赛)
答案 0 :(得分:19)
简单:
if((x & y) != 0) {...}
这是一个按位“和”,然后测试任何交叉点。
答案 1 :(得分:11)
要获取两个值中设置的值,请使用and(&
)运算符:
mystuff & hisstuff
这为您提供了一个仅包含重叠值的新值,仅在您的示例中为Stuff.stuff2
。要检查是否有任何值重叠,请检查它是否为非零:
if ((mystuff & hisstuff) != 0) ...