修改List.Contains行为

我有一个Listclass 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.Contains查找用于进行比较的IEquatable接口。

根据List.Contains的文档 ,它使用IEquatable接口或IEquatable的实现,您也可以覆盖它。

您是否尝试重写Equals方法?

List ,根据reflection器,使用EqualityComparer来检查包含,默认实现(ObjectEqualityComparer)对大多数普通对象使用Equals。