让我们说我有一个名为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代替。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top