Generic HashSet的GetHashCode方法<t> </t>

时间:2013-09-02 11:15:37

标签: c# generics hash

我正在尝试为HashSet编写一个Generic IEqualityComparer,这样当且仅当它们的元素匹配时,两个set才是等号。

所以,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,对它们进行排序和连接,并获得结果字符串的哈希码是个坏主意吗?

1 个答案:

答案 0 :(得分:1)

IEqualityComparer<T> Interface抽象了这里所需的操作集:

  • Equals
  • GetHashode

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

但是,我的理解是HashSet<>的策略是使用与您调用操作的对象关联的Comparer,即使它将另一个HashSet作为参数。