检查对象是否为空的最佳和最快方法
我经常在源代码中看到if(object.ReferenceEquals(myObject,null))的用法,用于检查myObject是否为null而不是我熟悉的if(myObject == null) 。
是否有任何特殊原因(如速度,可读性等)使用第一种方式而不是第二种方式? 你用哪一个?
先感谢您。
使用ReferenceEquals
请确保不应用特殊处理(例如重载运算符)。 如果与未绑定的generics一起使用,这也会导致不同的结果。
简单的事情通常是最有效的:( (myObject == null)
更高效
看看这篇文章
看看这篇有趣的文章
性能提示:首选(((Object)x)== null)到Object.ReferenceEquals(x,null)
==
运算符可以通过类实现重载,因此它可能不会进行引用比较(尽管它可能应该使用null
s)。 object.ReferenceEquals
不能,因此它可靠地始终进行引用比较。
干杯马蒂亚斯
无法覆盖ReferenceEquals方法,因此您始终可以确定比较将比较对象引用,而不是传递给Equals方法的某些覆盖。
虽然它们编译成不同的东西,但它们通常具有相同的效果。 if (myObject == null)
导致ceq
操作码,我希望编译为更快的代码。 object.ReferenceEquals
是一个方法调用,就像任何其他方法一样。
当myObject
有operator=
方法时,它们是不同的; 如果存在,您的代码将调用此方法而不是使用ceq
。 operator=
然后可以随心所欲。
始终if (myObject == null)
除非你有理由不这样做。