两个包含相同元素的数组可以不相等吗?

时间:2013-04-14 18:43:36

标签: c# arrays list c#-4.0

今天我遇到了一个惊人的问题,我试图找到一个对象是否包含在List集合中。问题是列表找不到对象,并且当我可以在那里看到它时将index返回-1。然后,我创建了一个自定义索引查找器,通过比较属性而不是直接相等来查找对象,我发现其中一个对象的属性,一个相同的ushort数组在比较时返回false,但它们包含完全相同的元素。

数组如下:

  

{ushort [1]} [0] 13

它们两者完全相同,只是其中一个对象包含在List中,而另一个对象在它自己的上面。可能是造成这个问题的原因是什么?我已经尝试了所有类型的不同方法来解决问题,但我不能弄清楚问题是什么。在这种特殊情况下,导致两个数组之间的比较返回false的原因是,我使用Object.equals以及普通==比较器进行了绑定。感谢

1 个答案:

答案 0 :(得分:5)

对于数组,只有在比较指向同一数组的两个引用时,Equals才会返回true。要按内容比较不同的数组,您可以使用:

 Enumerable.SequenceEqual(a1, a2)

此外,如果集合包含自定义类型的对象,请确保这些类型重写等于,等于运算符(==)和GetHashCode。