修改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)使用的Equals对大多数正常的对象。
不隶属于 StackOverflow