Проверяя, имеют ли четыре логические переменные одинаковое значение, неочевидное?

У меня есть четыре переменных bool, скажем:

bool a=true;
bool b=false;
bool c=true;
bool d=false;

то я хочу проверить, что эти четыре равны. Тем не менее,

Console.WriteLine(true == false == true == false);
true

Почему это происходит? Я думаю, что это из-за порядка оценки уравнения, которое идет слева направо:

((true == false) == true) == false
(false == true) == false
false == false
true

Затем Каков правильный способ проверить, равны ли все N > 2 булевых переменных?

Ответ 2

if(a==b && a==c && a==d)

Если у вас есть переменное число bools не только 4

var bools = new bool[] { a, b, c, d };
var areAllEqual = bools.Skip(1).All(b=>b==bools[0]);

Ответ 3

Я думаю, вы можете добавить их в массив, а затем использовать оператор All

yourboolarray.All(x=>x == a) // compare with any a,b,c,d

Ответ 4

вы могли бы использовать побитовые методы для этого

где по целочисленному представлению bools будет равно 0 или 15 (или любое значение, зависящее от количества бит)

может потребоваться некоторая реструктуризация кода, хотя