啊,你不只是喜欢一个好的三元虐待吗?:) 考虑以下表达式:
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)
简洁明了。但它确实取决于在第一种情况下工作的三元运算符关联性。括号只会把它做成意大利面。
那么 - 这是在任何地方指定的吗?我找不到它。