ObservableCollection 中的 C# 相等性
C# Equality in ObservableCollection
我有一个自定义对象,我已成功覆盖了 Equals 和 HashCode 函数。然后我有 2 个 Observable 集合,我在上面初始化完全相同的对象(但具有不同的引用)。所以我有这个代码:
if (qObjects.Equals(qObjects2))
{
Console.WriteLine("Arrays are equal");
}
我希望 return 正确,但 return 错误。你可能会说我做错了 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");
}
以上代码片段return是正确的。那么我在这里缺少什么?
当您使用 Equals
, the ObservableCollection
objects themselves will be compared. This obviously results in false
, because the collection's class does not override Equals
(it's inherited from Object
so compares references). In order not to have to iterate objects yourself, you can use SequenceEqual
方法比较集合时。 (令人困惑的不是 SequenceEquals 方法)。
if (qObjects.SequenceEqual(qObjects2)) {
Console.WriteLine("Arrays are equal");
}
我有一个自定义对象,我已成功覆盖了 Equals 和 HashCode 函数。然后我有 2 个 Observable 集合,我在上面初始化完全相同的对象(但具有不同的引用)。所以我有这个代码:
if (qObjects.Equals(qObjects2))
{
Console.WriteLine("Arrays are equal");
}
我希望 return 正确,但 return 错误。你可能会说我做错了 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");
}
以上代码片段return是正确的。那么我在这里缺少什么?
当您使用 Equals
, the ObservableCollection
objects themselves will be compared. This obviously results in false
, because the collection's class does not override Equals
(it's inherited from Object
so compares references). In order not to have to iterate objects yourself, you can use SequenceEqual
方法比较集合时。 (令人困惑的不是 SequenceEquals 方法)。
if (qObjects.SequenceEqual(qObjects2)) {
Console.WriteLine("Arrays are equal");
}