gpt4 book ai didi

c# - C# 中的三元运算符关联性——我可以依赖它吗?

转载 作者:IT王子 更新时间:2023-10-29 04:52:32 26 4
gpt4 key购买 nike

啊哈,你不就是喜欢好好的三元虐吗? :) 考虑以下表达式:

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)

简洁明了。但这确实取决于三元运算符的结合性,就像第一种情况一样。括号只会把它变成意大利面。

所以 - 这是在任何地方指定的吗?我找不到它。

最佳答案

是的,您可以依赖于此(不仅在 C# 中,而且在所有(我知道的)其他语言中(except PHP ......去看看)带有条件运算符)并且您的用例实际上是一种非常常见的做法,尽管有些人讨厌它。

ECMA-334(C# 标准)中的相关部分是 14.13 §3:

The conditional operator is right-associative, meaning that operations are grouped from right to left. [Example: An expression of the form a ? b : c ? d : e is evaluated as a ? b : (c ? d : e). end example]

关于c# - C# 中的三元运算符关联性——我可以依赖它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com