我经常在源代码中看到使用 if(object.ReferenceEquals(myObject,null))来检查myObject是否为null而不是 if(myObject == null)我很熟悉。
使用第一种方式而不是第二种方式是否有任何特殊原因(如速度,可读性等)?你用哪一个?
提前谢谢。
答案 0 :(得分:5)
使用ReferenceEquals
时,请确保不应用特殊处理(例如重载运算符)。如果与未绑定的泛型一起使用,这也会导致不同的结果。
答案 1 :(得分:4)
简单的事情通常是最有效的:
(myObject == null)
性能更高
查看this文章
答案 2 :(得分:3)
答案 3 :(得分:1)
==
运算符可以通过类实现重载,因此它可能不会进行引用比较(尽管可能应该使用null
s)。 object.ReferenceEquals
不能,因此可靠地始终进行参考比较。
干杯 的Matthias
答案 4 :(得分:1)
无法覆盖ReferenceEquals方法,因此您始终可以确定比较将比较对象引用,而不是传递给Equals方法的某些覆盖。
答案 5 :(得分:1)
它们通常具有相同的效果,尽管它们编译成不同的东西。 if (myObject == null)
导致ceq
操作码,我希望编译为更快的代码。 object.ReferenceEquals
是一种方法调用。
myObject
使用operator=
方法时,它们会有所不同;如果存在,您的代码将调用此方法,而不是使用ceq
。然后operator=
可以随心所欲。
始终if (myObject == null)
,除非您有理由不这样做。