Hashsets和类的不同实例以相同的所有成员
-
19-09-2019 - |
题
让我们说我有一个名为MyClass的类。
在我的代码有MyClass的,MyClass1的和myclass2的两个实例。 他们的一切是(公共和私人)性质是相同的。
如果我试图两者添加到HashSet将其添加两个或只有一个? 如果它增加了两个,我不希望它,我可以overidde等于在myClass定义和HasSet会知道如何使用它?
解决方案
简短的回答,它取决于你的对象的equals方法。
更长的答案:
的HashSet将使用的IEqualityComparer以确定两个对象是否相等。如果你不提供的话,会使用EqualityComparer.Default
;这有效地只是使用的Object.Equals(A,B)再加上一些东西以避免装箱值类型。
检查object.Equals(a, b)
文档:它被有效地只检查空值之后执行a.Equals(b)
object.Equals(other)
的默认实现是检查仅引用相等(即,它们是一个对象的确切相同的实例),但可以替代此执行任何检查你喜欢,如检查如果一个ID字段是相同的。注意,忽略equals你还必须重写GetHashCode的时候。
如果你想改变的HashSet如何确定的平等,而不改变对象的定义,你可以提供一个自定义的IEqualityComparer代替。
不隶属于 StackOverflow