【发布时间】:2012-07-09 21:21:07
【问题描述】:
参考以下SE answer。
写作时
A = A ?? B;
和这个一样
if( null != A )
A = A;
else
A = B;
这是否意味着
if( null == A ) A = B;
在性能方面会更受欢迎吗?
或者我可以假设当同一个对象在?? 表示法中时编译器会优化代码?
【问题讨论】:
-
是的,这里的性能命中是不存在的。
-
两个版本都写,编译,用ILDasm或者dotPeek看看生成的代码有没有区别。
-
减号标记可读性。检查 null 是否等于任何东西并没有真正的意义。也许只是偏好,但我总是使用 if (A != null)。您正在对 A 进行检查,而不是 null。
-
条件的顺序主要是一种偏好。我发现将比较的值放在左侧更具可读性,因为它将重点放在最终结果上。这个习惯是一个古老的习惯,源于 C 和 C++ 中的编码,其中 '=' 在比较时可能会意外分配,在 C# 中它不再相关,但我发现比较更具可读性。如果您对 C/C++ 感兴趣,请查看仍然相关的 Effective C++ 书籍 (rads.stackoverflow.com/amzn/click/0321334876),另请参阅以下讨论:stackoverflow.com/questions/6883646/obj-null-vs-null-obj
标签: c# compiler-optimization null-coalescing-operator