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)
谢谢!
您!=从!=运算符递归调用运算符,因此堆栈溢出.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)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |