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

Use*_*er1 -2 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))
}
Run Code Online (Sandbox Code Playgroud)

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

Col*_*ell 8

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

x && y && z && (foo == null ? true : foo.Whatever())
Run Code Online (Sandbox Code Playgroud)

但你真正得到的是:

(x && y && z && foo == null) ? true : foo.Whatever()
Run Code Online (Sandbox Code Playgroud)

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