用 Equals() 覆盖相等运算符

Override the equality operators with Equals()

我已经调试一个问题很长时间了,我意识到它是由于在我本应使用 object.Equals()[=15= 的对象上使用 == 引起的]

为了防止此类问题,希望 == 操作员调用我已覆盖的 Object.Equals()

这可能吗?以下代码遇到 Stack-overflow 异常...

public static bool operator ==(Portfolio a, Portfolio b)
{
    return a != null && a.Equals(b);
}

public static bool operator !=(Portfolio a, Portfolio b)
{
    return a != null && !a.Equals(b);
}

谢谢!

您从 != 运算符递归调用 != 运算符,因此堆栈溢出。使用 ReferenceEquals 代替:

public static bool operator !=(Portfolio a, Portfolio b)
{
    return !object.ReferenceEquals(a, null) && !a.Equals(b);
}

就是说,这段代码是有缺陷的,因为如果 a 为 null 而 b 不是,它将 return false。您应该检查两个对象是否为空:

public static bool operator !=(Portfolio a, Portfolio b)
{
    if (object.ReferenceEquals(a, null))
    {
        return !object.ReferenceEquals(b, null);
    }

    return !a.Equals(b);
}