用Equals()覆盖相等运算符

gou*_*oul 1 c# overriding equality operators

我已经调试了一个问题已经有一段时间了,并且意识到它来自于==我应该使用的对象的使用object.Equals()

为了防止这样的问题,希望==操作员调用Object.Equals()我已经覆盖的内容.

那可能吗?以下代码遇到堆栈溢出异常...

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);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Kev*_*sse 6

!=!=运算符递归调用运算符,因此堆栈溢出.ReferenceEquals改为使用:

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

也就是说,这段代码存在缺陷,因为false如果a为null b则不会返回.您应该检查两个对象是否为null:

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

    return !a.Equals(b);
}
Run Code Online (Sandbox Code Playgroud)