2017-03-10 3 views
0

私は正常にEquals関数とHashCode関数をオーバーライドしたカスタムオブジェクトを持っています。それから私は2つのObservable Collectionsを持っていますが、私は正確に同じオブジェクトを初期化します(ただし、参照は異なります)。だから私はこのコードを持っています:C#Equality in ObservableCollection

if (qObjects.Equals(qObjects2)) { 
    Console.WriteLine("Arrays are equal"); 
    } 

これは私が本当に返すと期待しているが、falseを返します。私はEqual関数とHashCode関数で何か問題があったと言うかもしれません。しかしこれは変です:

for (int i = 0; i < qObjects.Count(); i++) { 
     arraysIsEqual = qObjects[i].Equals(qObjects2[i]); 
     if (!arraysIsEqual) 
       break; 
    } 

    if (arraysIsEqual) { 
     Console.WriteLine("Arrays are equal"); 
    } 

上記のコードスニペットはtrueを返します。だから私はここで何が欠けているのですか?

+1

*正常にEquals関数とHashCode関数をオーバーライドしました。* qObjectsクラスも表示できますか? –

答えて

4

コレクションをEqualsと比較すると、ObservableCollectionオブジェクト自体が比較されます。コレクションのクラスがEquals(これはObjectから継承されており、参照を比較しています)をオーバーライドしないため、明らかにfalseになります。オブジェクトを自分自身で繰り返さないためには、SequenceEqualsメソッドを使用できます。

+1

2つの異なるObservableCollectionを初期化してから意味があります。なぜ私はEqualがオブジェクトを比較することを期待していたのか分かりません。どうもありがとうございました。 – BlackM