2010-12-07 2 views
3

に等しいです。問題ですか?私がそれを踏み越えようとするとき、私のオーバーライドはさらに進んでいません。オーバーライドは、変数IDに基づいて比較するように等しい私が上書きしようとしているオペレータ

+0

は、==演算子をi1.Equals(i2)を呼び出すのと同じものを使用しています。私はいいえだが、毎日何か新しいことを学ぶだろう... – Rob

+1

@Rob彼らは同じではない、それは問題だ。 :) –

答えて

11

オブジェクトのEquals()メソッドは、 '=='演算子と同じではありません。タイプに「==」演算子をオーバーロードするか、の代わりにi1.Equals(i2)に電話する必要があります。

MSDN Guidelines for Overloading Equals() and Operator ==

2

operator ==のみ(デフォルトではそうではない)同じオブジェクトを両方i1i2ポイントかどうかを教えてくれます。 operator ==は無効にできますが、不変型の場合にのみ推奨されます。何をしたい

は次のとおりです。

bool test = i1.Equals(i2); 

およびリファレンス平等使用ReferenceEqualsを確認するには.Equals IDませんoperator == ID

if (obj is OrderID) 
{ 
    return ((OrderID)obj).ID.Equals(ID); 
} 

を使用しています。予想通りそれ以外の場合は、あなたのクラスが動作しない場合があります、またあなたに等しいをオーバーライドするときGetHashCode()を上書きする必要があることを覚えてまた - 比較するのに言及した使用i1.Equals(i2)のようEquals

0

を使用して、値の等価性をチェックするには。

関連する問題