是C#';s的null合并运算符(??)延迟求值
本文关键字:运算符 延迟 合并 null | 更新日期: 2023-09-27 18:25:29
问题的标题说明了一切。在C#表达式a ?? b
中,b
总是求值,还是仅在a
求值为null
时求值?
我对此感到好奇,因为在评估右手边表达式可能有副作用的情况下,或者在评估其计算成本可能很高的情况下这可能很重要。
??
的右侧被延迟求值;也就是说,只有当左侧的表达式已求值为null
时才对其求值。这可以很容易地测试:
bool rhsExpressionWasEvaluated = false;
bool _ = (bool?)true ?? (rhsExpressionWasEvaluated = true);
Debug.Assert(!rhsExpressionWasEvaluated);