我有一个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
注意Symbol属性是一个字符串。
为了澄清我在compareTo方法中设置了一个停止点,它甚至没有进入那里。
有人曾尝试过吗?
感谢。
答案 0 :(得分:22)
确定是否调用CompareTo方法的最简单方法是在其中设置断点并按F5运行程序。但我相信List<T>.Contains
会查找用于进行比较的IEquatable<T>
界面。
答案 1 :(得分:5)
根据List<T>.Contains
的{{3}},它使用您的IEquatable
界面实现或object.Equals
,您也可以覆盖。
答案 2 :(得分:2)
您是否尝试重写Equals方法?
根据反射器, List<T>
使用EqualityComparer<T>
来检查包含,默认实现(ObjectEqualityComparer)对大多数普通对象使用Equals。