You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

逻辑OR与三元运算符求值顺序:代码执行结果疑问解析

嘿,这个问题刚好戳中了运算符优先级和结合性的常见误区,我来给你掰扯明白!

首先得纠正一个核心误解:在C#里,逻辑OR(||)的优先级确实高于条件运算符(?:),但这和你预期的求值顺序完全相反——你以为会是true || (false ? false : true),但实际编译器会把表达式解析成(true || false) ? false : true,这才是优先级规则的正确应用方式。

为什么是这样?

优先级的本质是:优先级高的运算符会先绑定自己的左右操作数。因为||比?:优先级高,所以它会先把true和false这两个操作数结合成一个整体,再把这个整体作为三元运算符的条件部分,而不是让三元运算符先处理后面的false ? false : true。

再拆解你的示例代码

咱们一步步看执行逻辑:

  1. 先处理true || false:因为逻辑OR是短路求值,只要第一个操作数是true,后面的false根本不会被执行——这就是为什么你看到这个false被标记为不可达。
  2. 这个部分的结果是true,所以三元表达式变成了true ? false : true。此时,三元运算符的: true分支永远不会被触发(因为条件永远是true),所以这个true也被标记为不可达。
  3. 三元表达式的最终结果是false,所以if的条件永远不满足,里面的Console.WriteLine自然永远不会执行。

怎么得到你预期的行为?

如果你想让三元运算符先求值,只需要手动加括号强制改变结合顺序:

if ( true || (false ? false : true) ) { 
    Console.WriteLine(String.Format("WHY?")); 
}

此时表达式会先计算false ? false : true得到true,再和前面的true做OR运算,结果是true,if条件就会满足了。

内容的提问来源于stack exchange,提问作者Виталий Камалин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:47:33