修改List.Contains行为
我有一个List
, class MyObj : IComparable
。 我根据IComparable
接口在MyObj
类中编写了CompareTo
方法,但是当我使用List.Contains(myObjInstance)
时,它应该为true
时返回false
。
我不确定我是否理解如何在调用然后Contains
函数时确保List
使用我的自定义比较方法。
这是我的compareTo实现:
#region IComparable Members public int CompareTo(object obj) { MyObj myObj = (MyObj)obj; return String.Compare(this.Symbol, myObj.Symbol, true); } #endregion
请注意,Symbol属性是一个字符串。
为了澄清我在compareTo方法中设置了一个停止点,它甚至没有进入那里。
有人试过吗?
谢谢。
找出您的CompareTo方法是否被调用的绝对最简单的方法是在其中设置断点并按F5运行您的程序。 但我相信List
查找用于进行比较的IEquatable
接口。
根据List
的文档 ,它使用IEquatable
接口或IEquatable
的实现,您也可以覆盖它。
您是否尝试重写Equals方法?
List
,根据reflection器,使用EqualityComparer
来检查包含,默认实现(ObjectEqualityComparer)对大多数普通对象使用Equals。