Я думаю, что ваш вопрос несколько ухудшился с вашей точки зрения.
В a = b = c = 2
нет ничего волшебного, чтобы предположить, что a == b == c == 2
должен работать так, как вы хотите - на самом деле больше, наоборот -
Оператор присваивания определен только для 2 операндов и возвращает установленное значение. Строка из них просто передает значение от каждого оператора следующему:
1: a = (b = (c = 2));
2: a = (b = (2));
3: a = (2);
То же самое относится и к a == b == c == 2
:
1: bool allTwo = (a == (b == (c == 2)));
2: bool allTwo = (a == (b == ([Boolean])));
3: bool allTwo = (a == ([Boolean]));
4: bool allTwo = ([Boolean]);
Итак, техническая причина заключается в том, что C#
не содержит определения для специальной обработки строки операторов.
Что касается дизайна и реализации языка, причина, вероятно, заключалась бы в том, чтобы предотвратить двусмысленность и дополнительную сложность. Хотя вы, возможно, захотите, чтобы a == b == c == 2
был определен как оператор , все равно равный , на следующей строке он вполне может понадобиться для того, чтобы он действовал так, как в настоящее время реализовано. Как следует различать поведение? И действительно ли это стоило бы усилий для реализации?
Или a == 2 && b == 2
действительно так плохо? ;)