[英]C# Equality in ObservableCollection
我有一个自定义对象,我已经成功地覆盖了 Equals 和 HashCode 函数。 然后我有 2 个 Observable 集合,我在上面初始化了完全相同的对象(但具有不同的引用)。 所以我有这个代码:
if (qObjects.Equals(qObjects2))
{
Console.WriteLine("Arrays are equal");
}
我期望返回 true 但返回 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。 那么我在这里缺少什么?
当您将集合与Equals
进行比较时,将比较ObservableCollection
对象本身。 这显然导致false
,因为集合的类没有覆盖Equals
(它继承自Object
所以比较引用)。 为了不必自己迭代对象,您可以使用SequenceEqual
方法。 (令人困惑的是不是 SequenceEquals 方法)。
if (qObjects.SequenceEqual(qObjects2)) {
Console.WriteLine("Arrays are equal");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.