21

例如。我有以下枚举

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

所以我将 mystuff 设置为

mystuff = Stuff.stuff1|Stuff.stuff2;

然后我将 hisstuff 设置为

hisstuff = Stuff.stuff2|Stuff.stuff3;

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

如果有多种方法可以做到这一点,那么哪种方法最有效?(这是为了游戏)

4

2 回答 2

24

简单的:

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

这会按位“与”,然后测试任何交集。

于 2012-10-20T12:08:43.357 回答
11

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

mystuff & hisstuff

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

if ((mystuff & hisstuff) != 0) ...
于 2012-10-20T12:13:33.617 回答