.Net Collection类对包含的成员使用.Equals()来计算.Contains()?

时间:2010-12-14 01:21:28

标签: .net collections

主题几乎都说明了。

集合类是否使用(重写).Equals()方法来确定集合类.Contains()是否为元素?或者它是使用引用相等还是其他方法?

我希望集合类在确定集合.Contains()是否为元素时忽略包含成员上的单个字段。

4 个答案:

答案 0 :(得分:3)

Collection使用EqualityComparer<T>.DefaultList并不那么明确(它说它使用“默认的相等比较器,由对象的T IEquatable<T>.Equals方法的实现定义”,这不能解释如果它没有发生会发生什么'实施IEquatable),但我怀疑它是一样的。

如果类型实现它,那将使用IEquatable<T>实现,或者只使用常规Object.EqualsObject.GetHashCode(可以覆盖)。

答案 1 :(得分:2)

这要求个人测试用例。 :)

编写测试,使用一个模拟对象构造一个列表,执行.Contains()。

现在检查模拟对象 - 调用了.Equals()吗? 哈希值怎么样?

答案 2 :(得分:2)

根据these articles,除非您的对象实现IEquatable,否则将使用Object.Equals。

答案 3 :(得分:1)

Contains的重载带有IEqualityComparer,所以你可以自己滚动。