为什么在C#中使用something.Equals(null)时会出现空引用错误

时间:2013-12-17 19:08:42

标签: c# nullreferenceexception

当我尝试检查某些内容是否为空时,我一直收到空引用错误。我有一个名为User的类,我像这样初始化变量indvUser

User indvUser = api.Users.SearchByExternalId(session.UserInfo.UserId.ToString())
                   .Users.FirstOrDefault();

然后我想检查一下indvUser是否为null

if (indvUser.Equals(null))
{
    int a = 1;
}

但是在使用我不理解的Equals(null)时,我得到一个空引用错误。如果它实际上是null,即没有值,那么Equals(null)不应该返回true吗?

4 个答案:

答案 0 :(得分:6)

由于indvUsernullindvUser.EqualsUser对象上的实例方法(即,它需要对象的非null实例),. NET将抛出您尝试使用它的错误。

对于这样的事情,你可以使用它:

Object.ReferenceEquals(indvUser, null)

或者简单地说:

indvUser == null

由于这两种方法都没有真正尝试访问indvUser对象本身的方法或属性,因此您应该安全NullReferenceExceptions

答案 1 :(得分:2)

排队:

indvUser.Equals(null)

如果indvUser 为null,那么如何调用Equals方法呢?它可以简单地看作:

null.Equals(null)

您应将其与indvUser == nullobject.ReferenceEquals(indvUser, null)

进行比较

答案 2 :(得分:1)

Object.Equals是一种非静态的方法。要调用Equals方法,您必须拥有该类的实例。

答案 3 :(得分:0)

如果indUser == null你正在做null.Equals(null)会引发异常。