c# - 双问号 ('??' ) 与分配相同 var 时的对比

标签 c# compiler-optimization null-coalescing-operator

引用以下SE answer .

写作时

A = A ?? B;

一样
if( null != A )
    A = A;
else
    A = B;

那是什么意思

if( null == A ) A = B;

在性能方面会是首选吗?

或者当同一对象处于 ?? 表示法时,我可以假设编译器优化了代码吗?

最佳答案

不用担心性能,它可以忽略不计。

如果您对此感到好奇,请编写一些代码使用Stopwatch 测试性能并查看。不过,我怀疑您需要进行几百万次迭代才能开始看到差异。

您也永远不能假设事物的实现,它们将来可能会发生变化 - 使您的假设无效。

我的假设是性能差异可能非常非常小。我个人会选择空合并运算符以提高可读性,它很好,很简洁,并且很好地传达了这一点。我有时会这样做以进行延迟加载检查:

_lazyItem = _lazyItem ?? new LazyItem();

关于c# - 双问号 ('??' ) 与分配相同 var 时的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11412639/

相关文章:

haskell - 也许合并运算符

c# - C# 空合并 (??) 运算符的运算符优先级是什么?

c# - DataGridView 中的数据关系

c# - C# ExpressionVisitor 实现的动机是什么?

c# - getter 和 setter 中的冗余代码

LLVM、-fprofile-instr-generate、对“__llvm_profile_register_function”的 undefined reference

c++ - 为什么 char* 和 std::string& 的别名优化结果不同?

c# - WinApp 窗体崩溃,没有任何错误或异常 .Net

compiler-construction - 如何在多 channel 编译器中正确重用符号表

c# - 在您看来,什么更易读 : ? ? (运算符)或使用 if's