Ответ 1
Простой:
if((x & y) != 0) {...}
Это побитовое "и", затем тесты для любого пересечения.
Например. У меня есть следующее перечисление
[Flags]
public enum Stuff
{
stuff1=1,
stuff2=2,
stuff3=4,
stuff4=8
}
Таким образом, я задал мистический смысл
mystuff = Stuff.stuff1|Stuff.stuff2;
тогда я устанавливаю его содержание
hisstuff = Stuff.stuff2|Stuff.stuff3;
Как мне теперь проверить, перекрываются ли эти перекрытия - у него и в самом мистере есть хотя бы одно из значений enum?
А также, если есть несколько способов сделать это, что является наиболее эффективным? (Это для игры)
Простой:
if((x & y) != 0) {...}
Это побитовое "и", затем тесты для любого пересечения.
Чтобы получить значения, установленные в обоих значениях, вы используете оператор and (&
):
mystuff & hisstuff
Это дает вам новое значение с только перекрывающимися значениями, в вашем примере только Stuff.stuff2
. Чтобы проверить, перекрывается ли какое-либо из значений, вы проверяете, отличен ли он от нуля:
if ((mystuff & hisstuff) != 0) ...