今天我遇到了一个惊人的问题,我试图找到一个对象是否包含在List集合中。问题是列表找不到对象,并且当我可以在那里看到它时将index返回-1。然后,我创建了一个自定义索引查找器,通过比较属性而不是直接相等来查找对象,我发现其中一个对象的属性,一个相同的ushort数组在比较时返回false,但它们包含完全相同的元素。
数组如下:
{ushort [1]} [0] 13
它们两者完全相同,只是其中一个对象包含在List中,而另一个对象在它自己的上面。可能是造成这个问题的原因是什么?我已经尝试了所有类型的不同方法来解决问题,但我不能弄清楚问题是什么。在这种特殊情况下,导致两个数组之间的比较返回false的原因是,我使用Object.equals
以及普通==
比较器进行了绑定。感谢
答案 0 :(得分:5)
对于数组,只有在比较指向同一数组的两个引用时,Equals才会返回true。要按内容比较不同的数组,您可以使用:
Enumerable.SequenceEqual(a1, a2)
此外,如果集合包含自定义类型的对象,请确保这些类型重写等于,等于运算符(==)和GetHashCode。