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

为何curr1?.val ?? 0 + curr2?.val ?? 0返回2而非7?

问题原因:运算符优先级与结合性

你的问题核心是C#运算符的优先级和结合性导致表达式执行顺序和预期不符。

原表达式的实际执行流程

在C#中,运算符优先级从高到低的关键顺序为:?.(空传播运算符)> +(加法运算符)> ??(空合并运算符),且??是左结合的(即从左到右依次计算)。

原表达式curr1?.val ?? 0 + curr2?.val ?? 0会按以下步骤执行:

  • 第一步:计算所有?.操作,curr1?.val得到2,curr2?.val得到5;
  • 第二步:执行优先级更高的+操作,计算0 + 5,结果为5;
  • 第三步:表达式简化为2 ?? 5 ?? 0;
  • 第四步:按左结合规则计算2 ?? 5,空合并运算符返回第一个非空值,这里2非空,结果为2;
  • 第五步:计算2 ?? 0,结果仍为2。

这就是最终结果为2而非预期7的原因。

正确表达式的逻辑

你使用的(curr1?.val ?? 0) + (curr2?.val ?? 0)能得到正确结果,是因为括号强制改变了执行优先级:先分别计算两个空合并操作,得到2和5,再执行加法运算得到7。


内容的提问来源于stack exchange,提问作者Catherine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:45:59