2009-07-02 16 views
8

私はのList<MyObj>を持っています。 IComparableインターフェイスごとにMyObjクラスのメソッドCompareToを書きましたが、List<MyObj>.Contains(myObjInstance)を使用すると、trueのときにfalseが返されます。リストを修正してください。振る舞い

ListContains関数を呼び出すときに私のカスタム比較方法を使用していることを確認する方法を理解しているかどうかはわかりません。シンボルプロパティが文字列である

#region IComparable Members 

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

    #endregion 

注:

は、ここに私のcompareToの実装です。

明確にするために、私はそのcompareToメソッドに停止点を置いており、そこにも入っていません。

誰でもこれまでに試みたことがありますか?

ありがとうございました。

+0

あなたのコードを表示できますか? –

+0

具体的にはCompareTo –

答えて

22

CompareToメソッドが呼び出されたかどうかを確認する最も簡単な方法は、ブレークポイントを設定してF5キーを押してプログラムを実行することです。しかし、私はList<T>.Containsが比較を行うためにIEquatable<T>インターフェースを探すと信じています。

+0

の実装がこれを行いました。それはそこに止まらない。 : – Lancelot

+0

@Lancelot:第2文も読んでください; o) –

+0

すごく少し速いです。私はそれを試し、あなたに知らせるでしょう。ありがとう。 :) – Lancelot

2

Equalsメソッドをオーバーライドしてみましたか?

List<T>(リフレクタに従って)は、EqualityComparer<T>を使用して包含をチェックし、デフォルトの実装(ObjectEqualityComparer)では、ほとんどの通常のオブジェクトでEqualsが使用されます。

5

List<T>.Containsdocumentationによれば、IEquatableインターフェイスの実装またはobject.Equalsのどちらかを使用してオーバーライドすることもできます。

関連する問題