2009-07-02 24 views
8

我與class MyObj : IComparable一個List<MyObj>。我在每IComparable接口MyObj類寫的方法CompareTo,但是當我使用List<MyObj>.Contains(myObjInstance)返回false當它應該是true修改List.Contains行爲

我不確定我是否理解我需要繼續確保List在調用Contains函數時使用我的自定義比較方法。

這裏是我的compareTo實現:

#region IComparable Members 

    public int CompareTo(object obj) 
    { 
     MyObj myObj = (MyObj)obj; 
     return String.Compare(this.Symbol, myObj.Symbol, true); 
    } 

    #endregion 

注意符號屬性是一個字符串。

爲了澄清,我已經把一個停止點在compareTo方法,它甚至不會在那裏。

任何人都曾經嘗試過?

謝謝。

+0

你能告訴我們你的代碼嗎? – 2009-07-02 19:53:46

+0

具體執行CompareTo – 2009-07-02 19:54:17

回答

22

,以找出是否你的CompareTo方法稱爲絕對最簡單的方法是設置中有一個斷點,然後按F5運行程序。但我相信List<T>.Contains尋找IEquatable<T>接口進行比較。

2

你嘗試重寫Equals方法?

List<T>根據反射器,使用EqualityComparer<T>來檢查遏制,默認實現(ObjectEqualityComparer)對大多數普通對象使用Equals。

5

根據documentationList<T>.Contains,它使用您的IEquatable接口或object.Equals的實現,您也可以重寫。