2

欺骗:空差

一生前,我看到一篇文章解释了以下不相等(在 c# 中):

if (o == null) {}
if (null == o) {}

该文章解释说,后者是首选,因为它导致更准确的测试。从那以后我就一直这样编码。现在我明白了很多,我一直在寻找这篇文章或其他类似的文章,看看确切的发现是什么,但我找不到关于这个主题的任何东西。

想法?有区别吗?第一眼会说不。但是谁知道在 IL 和 C# 编译的内部会发生什么。

4

5 回答 5

9

阻止你打字是一个老习惯if (o = null)。if (null = o) 是语法错误。在 C# 中有点毫无意义,因为空值永远不会被强制转换为布尔值。

于 2009-01-08T16:11:29.947 回答
3

后者是 C/C++ 时代的遗留物,可能会意外地分配一个值而不是比较。C# 不允许你这样做,所以要么/要么是可以接受的(但我发现前者更具可读性)。

于 2009-01-08T16:13:07.307 回答
2

在 c# 中没有区别。C/C++ 开发人员的一个旧习惯是避免出现以下语法正确的常见错误:

if(o = null)

在 C# 中它不会编译,但在 C 和 C++ 中它会,给你留下一个非常讨厌的错误。所以很多人习惯了

if(null == o)
于 2009-01-08T16:12:30.273 回答
0

与 C# 无关,这是来自 C。请参阅此问题进行讨论。

于 2009-01-08T16:11:57.917 回答
0

我使用 Java ..我确实有在 LHS 上使用常量进行所有交换比较的习惯。

"name".equals(name)

 null == obj

"55".compareTo(numString)

等等...只是避免不必要的 NullPointerExceptions...

于 2009-01-08T16:18:17.953 回答