问题的标题说明了一切。在C#表达式a ?? b
中,b
始终是评估的,还是仅在a
评估为null
时?
我对此感到好奇,因为在评估右侧表达可能会产生副作用,或者其评估可能计算成本昂贵的情况下,这可能很重要。
答案 0 :(得分:9)
??
的右侧被懒惰地评估;也就是说,仅当左侧的表达式已评估为null
时才会对其进行评估。这很容易测试:
bool rhsExpressionWasEvaluated = false;
bool _ = (bool?)true ?? (rhsExpressionWasEvaluated = true);
Debug.Assert(!rhsExpressionWasEvaluated);