我有一个自定义对象,我已成功覆盖Equals和HashCode函数.然后我有2个Observable Collections,我在其上初始化完全相同的对象(但使用不同的引用).所以我有这个代码:
if (qObjects.Equals(qObjects2))
{
Console.WriteLine("Arrays are equal");
}
Run Code Online (Sandbox Code Playgroud)
我期望返回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");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段返回true.那么我在这里缺少什么?
当您与集合进行比较时Equals,ObservableCollection将比较对象本身.这显然会导致false,因为集合的类不会覆盖Equals(它继承自Object比较引用).为了不必自己迭代对象,您可以使用SequenceEquals方法.
if (qObjects.SequenceEquals(qObjects2)) {
Console.WriteLine("Arrays are equal");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |