【问题标题】:Hashsets and different instances of class with all members identical哈希集和所有成员相同的类的不同实例
【发布时间】:2010-11-21 19:32:35
【问题描述】:

假设我有一个名为 myclass 的类。

在我的代码中,我有两个 myclass 实例,myclass1 和 myclass2。 它们的一切(公共和私有)属性都是相同的。

如果我尝试将它们都添加到 HashSet 中,它会同时添加还是仅添加一个? 如果它同时添加而我不想要它,我可以在 myclass 定义中覆盖 equals 并且 HasSet 会知道如何使用它吗?

【问题讨论】:

    标签: .net equals equality hashset iequalitycomparer


    【解决方案1】:

    简短的回答,这取决于您对象的 Equals 方法。

    更长的答案:

    HashSet 将使用 IEqualityComparer 来确定两个对象是否相等。如果您不提供,它将使用EqualityComparer.Default;它实际上只是使用 object.Equals(a, b) 加上一些东西来避免装箱值类型。

    检查object.Equals(a, b) 的文档:它实际上只是在检查空值后执行a.Equals(b)

    object.Equals(other) 的默认实现是仅检查引用相等性(即,它们是对象的完全相同的实例),但您可以覆盖它以执行您喜欢的任何检查,例如检查 ID 字段是否为完全相同的。请注意,在覆盖 Equals 时,您还必须覆盖 GetHashCode。

    如果您想在不改变对象定义的情况下更改 HashSet 确定相等性的方式,您可以为其提供自定义 IEqualityComparer。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多