8

我有一个List<MyObj>class MyObj : IComparable. CompareTo我在每个接口的MyObj类中编写了方法IComparable,但是当我使用它时,它应该List<MyObj>.Contains(myObjInstance)返回。falsetrue

我不确定我是否理解我需要如何继续以确保在调用 then函数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 方法中设置了一个停止点,它甚至没有进入那里。

有人试过吗?

谢谢。

4

3 回答 3

23

确定是否调用了 CompareTo 方法的最简单的方法是在其中设置一个断点并按 F5 来运行您的程序。但我相信List<T>.Contains寻找用于IEquatable<T>进行比较的界面。

于 2009-07-02T19:54:23.020 回答
5

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

于 2009-07-02T20:06:40.797 回答
2

您是否尝试覆盖 Equals 方法?

List<T>,根据反射器,用于EqualityComparer<T>检查包含,默认实现(ObjectEqualityComparer)对大多数普通对象使用 Equals。

于 2009-07-02T20:00:33.400 回答