我有一個自定義對象的集合,我正在做IndexOf來查找特定對象的索引。我會假設IndexOf會使用IComparable實現來檢查對象是否匹配,但我沒有在我的類中實現它。.NET - 如果我沒有在我的類中實現IComparable,IndexOf如何工作?
IndexOf如何確定兩個對象是相等的?
謝謝!
我有一個自定義對象的集合,我正在做IndexOf來查找特定對象的索引。我會假設IndexOf會使用IComparable實現來檢查對象是否匹配,但我沒有在我的類中實現它。.NET - 如果我沒有在我的類中實現IComparable,IndexOf如何工作?
IndexOf如何確定兩個對象是相等的?
謝謝!
目前尚不清楚哪種類型你呼籲反正IndexOf
,但大多數的收藏不會使用IComparable
反正 - 他們就用Equals
並做線性搜索。除非您重寫了Equals
(或實現IEquatable<T>
),否則將通過引用標識比較類,並且結構將自動生成相等比較。 IComparable
將用於像排序列表的二進制搜索。
從MSDN的列表(T).IndexOf方法:
此方法確定平等使用 默認的相等比較 EqualityComparer(T)爲.DEFAULT T, 值的列表中的類型。
比較使用EqualityComparer<T>.Default
完成。
EqualityComparer<T>.Default
將返回一個默認的實現,如果存在的話...否則它使用基於Object.Equals()
的實現,我猜是你的情況正在使用什麼。
除非您已覆蓋Equals()
或已實施IEquatable<T>
,否則Object.Equals()
將僅檢查參考平等。