欺骗:空差
一生前,我看到一篇文章解释了以下不相等(在 c# 中):
if (o == null) {}
if (null == o) {}
该文章解释说,后者是首选,因为它导致更准确的测试。从那以后我就一直这样编码。现在我明白了很多,我一直在寻找这篇文章或其他类似的文章,看看确切的发现是什么,但我找不到关于这个主题的任何东西。
想法?有区别吗?第一眼会说不。但是谁知道在 IL 和 C# 编译的内部会发生什么。
阻止你打字是一个老习惯if (o = null)
。if (null = o) 是语法错误。在 C# 中有点毫无意义,因为空值永远不会被强制转换为布尔值。
后者是 C/C++ 时代的遗留物,可能会意外地分配一个值而不是比较。C# 不允许你这样做,所以要么/要么是可以接受的(但我发现前者更具可读性)。
在 c# 中没有区别。C/C++ 开发人员的一个旧习惯是避免出现以下语法正确的常见错误:
if(o = null)
在 C# 中它不会编译,但在 C 和 C++ 中它会,给你留下一个非常讨厌的错误。所以很多人习惯了
if(null == o)
与 C# 无关,这是来自 C。请参阅此问题进行讨论。
我使用 Java ..我确实有在 LHS 上使用常量进行所有交换比较的习惯。
"name".equals(name)
null == obj
"55".compareTo(numString)
等等...只是避免不必要的 NullPointerExceptions...