Ах, разве ты просто не любишь хорошее тернарное насилие?:) Рассмотрим следующее выражение:
true ? true : true ? false : false
Для тех из вас, кто сейчас совершенно озадачен, могу сказать вам, что это оценивается как true. Другими словами, это эквивалентно этому:
true ? true : (true ? false : false)
Но разве это надежно? Могу ли я быть уверенным, что при некоторых обстоятельствах это не произойдет:
(true ? true : true) ? false : false
Некоторые могли бы сказать - ну, просто добавьте скобки или вообще не используйте его - в конце концов, это хорошо известный факт, что троичные операторы злы!
Конечно, они есть, но есть некоторые обстоятельства, когда они действительно имеют смысл. Для любопытных - я нажимаю код, который сравнивает два объекта по ряду свойств. Было бы неплохо, если бы я написал это так:
obj1.Prop1 != obj2.Prop1 ? obj1.Prop1.CompareTo(obj2.Prop1) :
obj1.Prop2 != obj2.Prop2 ? obj1.Prop2.CompareTo(obj2.Prop2) :
obj1.Prop3 != obj2.Prop3 ? obj1.Prop3.CompareTo(obj2.Prop3) :
obj1.Prop4.CompareTo(obj2.Prop4)
Ясный и лаконичный. Но это зависит от тернарной операторной ассоциативности, работающей, как в первом случае. Скобки просто сделают из него спагетти.
Итак - это указано где угодно? Я не мог найти его.