修改List.Contains行为(Modify List.Contains behavior)

2019-06-24 19:59发布

我有一个List<MyObj>class MyObj : IComparable 。 我写的方法CompareToMyObj每类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方法,它甚至不会在那里。

任何人都曾经尝试过?

谢谢。

Answer 1:

绝对最简单的方法,以找出是否你的CompareTo方法被称为是设置中有一个断点,然后按F5运行程序。 但我相信, List<T>.Contains查找的IEquatable<T>接口,用来比较。



Answer 2:

根据该文件的List<T>.Contains ,它使用您的任何实施IEquatable接口或object.Equals ,你可以重写为好。



Answer 3:

你尝试重写Equals方法?

List<T>根据反射器,用途EqualityComparer<T>以检查容器,和(ObjectEqualityComparer)使用默认实现的Equals对大多数正常的对象。



文章来源: Modify List.Contains behavior