双重问号('??')与分配相同的var时的比较

Loc*_*ith 15 c# null-coalescing-operator compiler-optimization

参考以下SE答案.

写作时

A = A ?? B;
Run Code Online (Sandbox Code Playgroud)

它是一样的

if( null != A )
    A = A;
else
    A = B;
Run Code Online (Sandbox Code Playgroud)

这是否意味着

if( null == A ) A = B;
Run Code Online (Sandbox Code Playgroud)

性能明智吗?

或者我可以假设编译器在??表示相同对象时优化代码?

Ada*_*rth 12

不要担心性能,它可以忽略不计.

如果您对此感到好奇,请编写一些代码来测试性能,Stopwatch并查看.我怀疑你需要做几百万次迭代才能开始看到差异.

你也可以永远不会假设事情的实施,他们将来可能会改变 - 使你的假设无效.

我的假设是性能差异可能非常非常小.为了便于阅读,我会选择空合并操作符,它很好并且很简单,并且很好地传达了这一点.我有时会进行延迟加载检查:

_lazyItem = _lazyItem ?? new LazyItem();
Run Code Online (Sandbox Code Playgroud)