繁体   English   中英

ObservableCollection 中的 C# 相等性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM