c# - C# 的空合并运算符 (??) 的右侧是否被延迟计算?

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

<分区>

问题的标题说明了一切。在 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/

相关文章:

c# - 如何使用数据读取器读取字符串值并将其存储在数组中

c# - 为什么 Unity 在 Mono 支持 .NET 3.5 时使用 .NET 2.0?

scala - 为什么递归惰性列表会破坏 Scala 中的堆栈?

c# - Linq to Object where子句和类型转换

clojure - 延迟分区

parsing - 应用解析器陷入无限循环

c# - 如何优化这些空值检查操作?

c# - 如何使用 CodeDOM 表达空合并运算符?

c# - 如何将可为空的 DateTime 转换为 UTC DateTime

需要 C# make 方法