我有一个对象数组如下:
private object[] _yazdirmaBilgisi = new object[5];
在某些方面我想访问第一个元素但当然我想检查它是否为空
在某些时候[0]为空但[1]不为空。
当我使用Equals
检查值是否为空时,它会抛出异常:
if (!_yazdirmaBilgisi[0].Equals(null)) //Throws exception
但如果我查看!=
null ne exception
if (_yazdirmaBilgisi[0] != null) // No exception
为什么会有所不同?
为什么Equals(null)
会抛出异常,但!= null
不会
答案 0 :(得分:3)
因为== null
与.Equals(null)
不同。如果使用Equals
,显然会因尝试访问空引用而出现异常。 ==
的工作方式不同,类似于Object.Equals(a,b)
,因为它会先检查两个值是否为空,然后进行更多比较。
答案 1 :(得分:1)
第一次抛出因为列表中的第一个元素是空引用。这就是您的代码正在做的事情:
var element = _yazdirmaBilgisi[0];
if (element.Equals(null)) // element is null, and null.Equals is calling a method on a null reference
==运算符被定义为执行与此类似的操作:
var element = _yazdirmaBilgisi[0]; // element is reference who's value is null
if (object.ReferenceEquals(element, null)) // object.Equals is a static method which doesn't require an object instance
答案 2 :(得分:1)
这一行:
if (!_yazdirmaBilgisi[0].Equals(null))
_yazdirmaBilgisi[0]
.Equals()
的对象。但由于该引用为null
,因此会抛出NullReferenceException
。
鉴于:
if (_yazdirmaBilgisi[0] != null)
直接将_yazdirmaBilgisi[0]
中的引用与null进行比较,因此它不会抛出异常 - 它不会尝试调用引用对象的任何方法。