null == x和x == null的区别是什么?

3

1
好的 - 这只是一些挑剔。但我想知道这里所有回答者是在胡说八道,还是他们实际上编译了两种方式的代码,并比较了生成的 IL 代码以确保它是相同的。 :) - James Johnston
3
有一篇文章显示,使用 null == x 相比于 x == null 有轻微的改进。文章链接:http://geekswithblogs.net/manishsati/archive/2010/08/31/difference-between-comparisons-null-x-and-xnull.aspx。 - Xaisoft
5个回答

25
在这种情况下,对于C#来说,这是个人偏好。 enter image description here 尤达条件

2
+1 主要是因为我使用了我的头像!! :P - digEmAll
+1 对于这张图片,你为 Stack Overflow 带来了新的东西! - Jalal Said
不按照上面Xaisoft的评论中的文章所述:geekswithblogs.net/manishsati/archive/2010/08/31/… - Ash Burlaczenko

14
这是来自C++时代的基本原则,因为在C++中,您几乎可以将任何内容传递到比较中,所以您可能会意外使用“=”而不是“==”来赋值变量,并且它仍然能够通过编译器的检查。 但请勿在C#中使用此方法,因为它不允许您这样做。
有效的 C++ 代码: if (p = NULL) // p被赋予NULL,并将结果与0进行比较 无效的 C# 代码: if (p = null) // 只能在测试中使用布尔值

6

使用 null == x 可以防止因为误打或漏打等原因导致的变量赋值而不是测试。如果写成 null = x,代码就会编译失败。

无论如何,使用 Object.ReferenceEquals(x, null) 更好,因为这样可以避免 == 被重载的情况。


有趣的是,ReferenceEquals可以与可空类型一起使用。然而,在这种情况下,我并不认为使用它有什么价值。到目前为止,我还没有遇到过== null无法按预期工作的情况。 - TrueWill
@TrueWill。我只看到过一个问题,自那以后我就使用ReferenceEquals()。我同意这不是常见的问题,而且在我看来,这种方法可读性较差,这是一个缺点。但我确实发现了一个SO问题,有人在使用==时遇到了问题。https://dev59.com/xnVC5IYBdhLWcg3w4VX6 - iandotkelly
鉴于运算符重载和愚蠢的存在,很容易破坏许多语言习惯。我倾向于可读性、简洁性,并尽我所能来消除破坏这些习惯的代码。 - TrueWill

1

在所有方面都完全相同。只是以相反的方式做同样的事情。


1
有性能差异吗,还是只是个人偏好?
不,绝对没有性能差异。这只是个人喜好的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接