【问题标题】:Modify List.Contains behavior修改 List.Contains 行为
【发布时间】:2010-11-07 18:16:33
【问题描述】:

我有一个List<MyObj>class MyObj : IComparable。我根据IComparable 接口在MyObj 类中编写了方法CompareTo,但是当我使用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

注意 Symbol 属性是一个字符串。

为了澄清,我在 compareTo 方法中设置了一个停止点,它甚至没有进入那里。

有人试过吗?

谢谢。

【问题讨论】:

  • 具体CompareTo的实现

标签: c# list contains icomparable icomparer


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您是否尝试覆盖 Equals 方法?

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-12-08
        • 2014-05-08
        • 2015-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-24
        相关资源
        最近更新 更多