質問

私はList<MyObj>class MyObj : IComparableを持っています。私はCompareToインターフェイスごとMyObjクラスのメソッドIComparableを書いたが、私はList<MyObj>.Contains(myObjInstance)を使用する場合、それはfalseしなければならないときには、trueを返します。

私は、その後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メソッドで停止点を入れてきたし、それもそこに行かない明確にします。

誰もが今までそれを試してみました?

感謝します。

役に立ちましたか?

解決

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

他のヒント

List<T>.Containsためのドキュメントのによると、それはあなたの実装のいずれかを使用していますあなたにも上書きできることIEquatableインタフェースまたはobject.Equals、のます。

あなたは、Equalsメソッドをオーバーライドしてみましたか。

List<T>は、反射鏡によれば、封じ込めをチェックするEqualityComparer<T>を使用し、デフォルトの実装(ObjectEqualityComparer)が最も通常のオブジェクトに対して等しい使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top