是否对C#的空合并运算符(??)进行了懒惰评估的右侧?

时间:2014-10-04 14:05:02

标签: c# lazy-evaluation null-coalescing-operator

问题的标题说明了一切。在C#表达式a ?? b中,b始终是评估的,还是仅在a评估为null时?

我对此感到好奇,因为在评估右侧表达可能会产生副作用,或者其评估可能计算成本昂贵的情况下,这可能很重要。

1 个答案:

答案 0 :(得分:9)

??的右侧被懒惰地评估;也就是说,仅当左侧的表达式已评估为null时才会对其进行评估。这很容易测试:

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