Modify List.Contains behavior
Solution 1
The absolute easiest way to find out whether your CompareTo method is called is to set a breakpoint in it and hit F5 to run your program. But I believe that List<T>.Contains
looks for the IEquatable<T>
interface for making the comparison.
Solution 2
According to the documentation for List<T>.Contains
, it uses either your implementation of IEquatable
interface or object.Equals
, that you can override as well.
Solution 3
Did you try overriding the Equals method?
List<T>
, according to reflector, uses EqualityComparer<T>
to check for containment, and the default implementation (ObjectEqualityComparer) uses Equals for most normal objects.
Comments
-
Lancelot over 1 year
I have a
List<MyObj>
with theclass MyObj : IComparable
. I wrote the methodCompareTo
in theMyObj
class per theIComparable
interface, but when I use theList<MyObj>.Contains(myObjInstance)
it returnsfalse
when it should betrue
.I'm not sure I'm understanding how I need to proceed to make sure the
List
uses my custom comparison method when calling thenContains
function.Here is my compareTo implementation:
#region IComparable Members public int CompareTo(object obj) { MyObj myObj = (MyObj)obj; return String.Compare(this.Symbol, myObj.Symbol, true); } #endregion
Note the Symbol property is a string.
To clarify I've put a stopping point in that compareTo method and it doesn't even go in there.
Anyone has ever tried that?
Thanks.