簡體   English   中英

用Equals()覆蓋相等運算符

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM