我调试问题已经有一段时间了,并且意识到这是由于在我本应该使用==
的对象上使用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);
}
谢谢!
最佳答案
您从!=
运算符递归调用!=
运算符,因此堆栈溢出。使用ReferenceEquals
代替:
public static bool operator !=(Portfolio a, Portfolio b)
{
return !object.ReferenceEquals(a, null) && !a.Equals(b);
}
也就是说,此代码存在缺陷,因为如果
false
为null而a
不是,则它将返回b
。您应该检查两个对象是否为空:public static bool operator !=(Portfolio a, Portfolio b)
{
if (object.ReferenceEquals(a, null))
{
return !object.ReferenceEquals(b, null);
}
return !a.Equals(b);
}
关于c# - 用Equals()覆盖相等运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37960087/