2013-04-14 188 views
1

今天我遇到了一個令人驚歎的問題,我試圖找到一個對象是否包含在List集合中。問題是列表沒有找到該對象,並返回索引爲-1,當我可以在那裏看到它。然後,我創建了一個自定義的索引查找器通過比較屬性而不是直接相等來查找對象,我發現其中一個對象的屬性,相同的ushort數組在比較時返回false,但它們完全包含相同的元素。包含相同元素的兩個數組不能相等嗎?

陣列如下:

{ushort的[1]} [0] 13

,他們是完全一樣的在兩個不同的對象中的一個被包含在一個列表,而另一個是自己的。造成這個問題的原因是什麼?我試過各種不同的方法來解決問題,但我不能找出問題所在。在這種特定情況下,導致兩個陣列之間的比較返回false的原因是,我使用Object.equals以及正常的==比較器進行了綁定。謝謝

+2

這個'{ushort [1]} [0] 13'是什麼樣的數組?這是什麼語法? – I4V

+0

對不起,只是以它在調試器中顯示的方式顯示它。這意味着ushort陣列的1個元素和第一個元素是13 –

回答

5

對於數組,只有在比較指向同一數組的兩個引用時,Equals纔會返回true。爲了比較的內容不同的數組,你可以使用:

Enumerable.SequenceEqual(a1, a2) 

另外,如果集合包含您的自定義類型的對象,確保這些類型的重寫equals,等號(==)和GetHashCode。

+0

OMG,我明白爲什麼這樣做會起作用,但這會增加考慮大數組的時間。它是如何工作的某些類型的數組,但不是全部?它是如何在某些情況下甚至找不到列表中的對象的。 –

+0

該對象只是一個具有ushort數組,ushort和int作爲公共屬性的類。絕對沒有任何東西的重寫 –

+0

比較數組將花費與數組大小成正比的時間。關於有時候比較起作用而有時候不起作用的情況,可能在第一種情況下,你比較了同一個對象,而在第二種情況下,你正在比較具有相同屬性的兩個不同對象。 – alex

相關問題