<分区>
问题的标题说明了一切。在 C# 表达式中 a ?? b
,是 b
总是求值,还是仅当 a
求值为 null
时?
我对此很好奇,因为在评估右侧表达式可能有副作用,或者其评估可能计算量大的情况下,这可能很重要。
<分区>
问题的标题说明了一切。在 C# 表达式中 a ?? b
,是 b
总是求值,还是仅当 a
求值为 null
时?
我对此很好奇,因为在评估右侧表达式可能有副作用,或者其评估可能计算量大的情况下,这可能很重要。
最佳答案
??
的右侧是惰性求值;也就是说,只有当左侧的表达式计算为 null
时,它才会被计算。这很容易测试:
bool rhsExpressionWasEvaluated = false;
bool _ = (bool?)true ?? (rhsExpressionWasEvaluated = true);
Debug.Assert(!rhsExpressionWasEvaluated);
关于c# - C# 的空合并运算符 (??) 的右侧是否被延迟计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193582/