Как проверить, является ли побитовое перечисление любыми значениями из другого побитового перечисления в С#? - программирование
Подтвердить что ты не робот

Как проверить, является ли побитовое перечисление любыми значениями из другого побитового перечисления в С#?

Например. У меня есть следующее перечисление

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

Таким образом, я задал мистический смысл

mystuff = Stuff.stuff1|Stuff.stuff2;

тогда я устанавливаю его содержание

hisstuff = Stuff.stuff2|Stuff.stuff3;

Как мне теперь проверить, перекрываются ли эти перекрытия - у него и в самом мистере есть хотя бы одно из значений enum?

А также, если есть несколько способов сделать это, что является наиболее эффективным? (Это для игры)

4b9b3361

Ответ 1

Простой:

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

Это побитовое "и", затем тесты для любого пересечения.

Ответ 2

Чтобы получить значения, установленные в обоих значениях, вы используете оператор and (&):

mystuff & hisstuff

Это дает вам новое значение с только перекрывающимися значениями, в вашем примере только Stuff.stuff2. Чтобы проверить, перекрывается ли какое-либо из значений, вы проверяете, отличен ли он от нуля:

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