[英]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.