我已经调试了一个问题很长一段时间,并意识到它来自于在我应该使用 object.Equals( )
为了防止此类问题,希望 ==
运算符调用我已覆盖的 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
不是,它将返回 false
。您应该检查两个对象是否为空:
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/