[英]Override the equality operators with Equals()
我已经调试了一个问题很长时间了,并且意识到这是由于我应该使用对象的情况下对对象使用==
导致的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);
}
就是说,此代码存在缺陷,因为如果a
为null而b
为非,它将返回false
。 您应该检查两个对象是否为空:
public static bool operator !=(Portfolio a, Portfolio b)
{
if (object.ReferenceEquals(a, null))
{
return !object.ReferenceEquals(b, null);
}
return !a.Equals(b);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.