2

問題の解決策を検索しましたが、間違ったキーワードをもう一度試したと思います。2 つの ObservableCollection を比較したい。Equals と SequenceEqual が機能しませんでした。

リフレクションを使用してある種の比較メソッドを作成しました。

var properties = typeof(MyClass).GetProperties();
for (var i = 0; i < list1.Count(); i++)
{
    foreach (var property in properties)
    {
        var value1 = property.GetValue(list1[i]);
        var value2 = property.GetValue(list2[i]);

        if (value1 != value2)
        {
            return false;
        }
    }
}

value1 と value2 はどちらも「true」ですが、return ステートメントにジャンプします。

もちろん、MyClass の各プロパティで手動で行うこともできますが、それはあまり快適ではありません。私の間違いがどこにあるのか教えていただければ幸いです。

4

1 に答える 1

3

value1およびvalue2ボックス化されobjectた s です。
==常に参照によってそれらを比較します。

if (Equals(value1, value2))代わりに、値で比較する をチェックする必要があります。具体的には、適切な null チェックの後
、オーバーライドされた を呼び出します。value1.Equals(value2)

于 2012-12-25T04:13:18.213 に答える