主题几乎都说明了。
集合类是否使用(重写).Equals()
方法来确定集合类.Contains()
是否为元素?或者它是使用引用相等还是其他方法?
我希望集合类在确定集合.Contains()
是否为元素时忽略包含成员上的单个字段。
答案 0 :(得分:3)
Collection
使用EqualityComparer<T>.Default
。 List
并不那么明确(它说它使用“默认的相等比较器,由对象的T IEquatable<T>.Equals
方法的实现定义”,这不能解释如果它没有发生会发生什么'实施IEquatable
),但我怀疑它是一样的。
如果类型实现它,那将使用IEquatable<T>
实现,或者只使用常规Object.Equals
和Object.GetHashCode
(可以覆盖)。
答案 1 :(得分:2)
这要求个人测试用例。 :)
编写测试,使用一个模拟对象构造一个列表,执行.Contains()。
现在检查模拟对象 - 调用了.Equals()吗? 哈希值怎么样?
答案 2 :(得分:2)
答案 3 :(得分:1)
Contains的重载带有IEqualityComparer,所以你可以自己滚动。