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

c#return语句中的空引用错误,c#,C#,如图所示,此方法应返回布尔值。当“this.myVal”中的值为null时,我只想返回true(我在上面这样做)。相反,我得到了一份工作 检查this.myVal时导致“对象引用未设置为对象实例”。此错误表示C#编译器不关心我的“null”检查?它为什么要抱怨空引用?此问题是由操作顺序引起的。你期待的是: public override bool Equals(object obj) { var c = obj as myObj; if (c == null) return fa

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

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

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))
}
但实际上你得到的是:

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

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

它与编译器无关,这是运行时异常。你能发布准确的堆栈跟踪吗?顺便问一下,你确定Id、电子邮件和代码不为空吗?你能提供堆栈跟踪吗?很难确定哪个对象引用没有它就不能设置。myVal的类型是什么?您是否也重写了它的Equals运算符?我故意设置为null的值是“myVal”。没有其他字段为空。myVal是字符串类型。引发的错误是System.nullReference异常。对象引用未设置为对象的实例。c、 myVal也是空的。我没有重写==运算符。科尔·坎贝尔:你的意思是:(x&&y&&z&&foo==null?)true:foo.Whatever()否。那段代码不会编译。我的第一个示例是您想要的:将整个三元运算符放在括号内(x?y:z)。或者更简单,在这里完全避免无意义的三元运算符,然后写入(this.myVal==null | | this.myVal.Equals(c.myVal))
(x && y && z && foo == null) ? true : foo.Whatever()