-2

重複の可能性:
参照型の 2 つのインスタンスを比較するための「ベスト プラクティス」とは?
無限再帰なしで '==' 演算子のオーバーロードで null をチェックするにはどうすればよいですか?

「Criterion」というクラスがあり、== 演算子を実装したいのですが、次の問題に苦労しています。

== 演算子を実装すると、インスタンスの 1 つまたは両方が null かどうかを確認しますが、それを行うと、== の再帰呼び出しが発生し、「StackOverflow」(he he) 例外が発生します。

技術的には、== をオーバーライドせずに Equals 演算子を実装できますが、== 演算子を実装すると、コードがはるかに読みやすくなります。

これが私のコードです:

public static bool operator == (Criterion c1, Criterion c2)
{
    if (null == c1)
    {
        if (null == c2)
            return true;
        return false;
    }
    if (null == c2)
        return false;                
    if ((c1.mId == c2.mId) && (c1.mName == c2.mName))
        return true;
    return false;
}
4

2 に答える 2

11

ReferenceEqualsを試してください:

public static bool operator ==(Criterion c1, Criterion c2) {
    var nullC1 = ReferenceEquals(null, c1);
    var nullC2 = ReferenceEquals(null, c2);
    if (nullC1 && nullC2)
        return true;

    if (!nullC1 && !nullC2)
        if (c1.mId == c2.mId && c1.mName == c2.mName)
            return true;

    return false;
}
于 2013-01-20T19:16:46.520 に答える
1

私は次のようにします:

bool isC1Null = Object.Equals(c1, null)
bool isC2Null = Object.Equals(c2, null)
if (isC1Null ^ isC2Null)
{
    return false
}
if (isC1Null && isC2Null)
{
    return true
}
//your code
于 2013-01-20T19:20:17.287 に答える