2

我搜索了我的问题的解决方案,但我想我再次尝试了错误的关键字。我想比较两个 ObservableCollections。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 都是“真”,但它会跳转到 return 语句。

当然,我可以使用 MyClass 的每个属性手动完成,但这并不是很舒服。希望你能告诉我我的错误在哪里。

4

1 回答 1

3

value1并且value2是盒装object的。
==将始终通过引用比较它们。

相反,您应该检查if (Equals(value1, value2)),它将按值比较它们。
具体来说,它会value1.Equals(value2)在适当的空检查之后调用被覆盖的 。

于 2012-12-25T04:13:18.213 回答