c#return语句中的空引用错误

时间:2012-05-14 23:38:04

标签: c#

public override bool Equals(object obj)
{
    var c = obj as myObj;
    if (c == null) return false;

    return   this.Id.Equals(c.Id)
        && this.Email.Equals(c.Email)
        && this.code.Equals(c.code)
        && (this.myVal == null) ? true : (this.myVal.Equals(c.myVal))
}

如图所示,此方法应返回布尔值。当“this.myVal”中的值为null时,我只想返回true(我正在上面做)。相反,我得到了一个 在检查this.myVal时导致“对象引用未设置为对象的实例”。此错误表明C#编译器不关心我的“null”检查?为什么要抱怨空引用?

1 个答案:

答案 0 :(得分:8)

此问题是由操作顺序引起的。你期待这个:

x && y && z && (foo == null ? true : foo.Whatever())

但你真正得到的是:

(x && y && z && foo == null) ? true : foo.Whatever()

将三元运算符放在括号内,以确保它以您期望的方式执行。