GetHashCode method for Generic HashSet<T>

本文关键字:lt gt HashSet method for Generic GetHashCode | 更新日期: 2023-09-27 18:30:03

我正试图为HashSet编写一个Generic 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,对它们进行排序和连接,并为生成的字符串获取哈希代码,这是个坏主意吗?

GetHashCode method for Generic HashSet<T>

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

  • Equals
  • GetHashode

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

但是,据我所知,HashSet<>具有使用与您调用操作的对象相关联的Comparer的策略,即使它以另一个HashSet作为参数也是如此。