-2
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”中的值为空时,我只想返回 true(我在上面做的)。相反,我在检查 this.myVal 时得到“对象引用未设置为对象的实例”。此错误表明 C# 编译器不关心我的“空”检查?为什么要抱怨空引用?

4

1 回答 1

8

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

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

但你实际上得到的是:

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

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

于 2012-05-14T23:54:41.107 回答