List.Containsの動作を変更します
-
21-08-2019 - |
質問
私は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)が最も通常のオブジェクトに対して等しい使用します。