0

我正在尝试为 HashSet 编写一个通用 IEqualityComparer,这样当且仅当它们的元素匹配时,两个集合才相等。

所以,Equals 看起来像:

    public bool Equals(HashSet<T> A, HashSet<T> B)
    {
        return (A.All(x => B.Contains(x)) && B.All(x => A.Contains(x)));
    }

我很难找到一个好的 GetHashCode 方法。我知道

    public int GetHashCode(HashSet<int> obj)
    {
        return 1;
    }

始终是一种选择,但我想要比这更好的东西。有人知道我该怎么做吗?在每个元素上使用 ToString,对它们进行排序和连接,并获取结果字符串的哈希码是一个坏主意吗?

4

1 回答 1

0

IEqualityComparer<T> Interface抽象此处所需的一组操作:

  • Equals
  • GetHashode

您可以像所有 .NET 类一样获得默认比较器:使用EqualityComparer<T>.Default Property

但是,据我了解,即使它需要另一个 HashSet 作为参数,HashSet<>也有策略使用与您调用操作的对象相关联的对象。Comparer

于 2013-09-02T11:22:09.420 回答