是C#';s的null合并运算符(??)延迟求值

本文关键字:运算符 延迟 合并 null | 更新日期: 2023-09-27 18:25:29

问题的标题说明了一切。在C#表达式a ?? b中,b总是求值,还是仅在a求值为null时求值?

我对此感到好奇,因为在评估右手边表达式可能有副作用的情况下,或者在评估其计算成本可能很高的情况下这可能很重要。

是C#';s的null合并运算符(??)延迟求值

??的右侧被延迟求值;也就是说,只有当左侧的表达式已求值为null时才对其求值。这可以很容易地测试:

bool rhsExpressionWasEvaluated = false;
bool _ = (bool?)true ?? (rhsExpressionWasEvaluated = true);
Debug.Assert(!rhsExpressionWasEvaluated);