Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通用HashSet的GetHashCode方法<;T>;_C#_Generics_Hash - Fatal编程技术网

C# 通用HashSet的GetHashCode方法<;T>;

C# 通用HashSet的GetHashCode方法<;T>;,c#,generics,hash,C#,Generics,Hash,我正试图为一个哈希集编写一个通用的IEqualityComparer,这样两个集在元素匹配时才相等 因此,Equals将类似于: public bool Equals(HashSet<T> A, HashSet<T> B) { return (A.All(x => B.Contains(x)) && B.All(x => A.Contains(x))); } public bool Equals(哈希集

我正试图为一个哈希集编写一个通用的IEqualityComparer,这样两个集在元素匹配时才相等

因此,Equals将类似于:

    public bool Equals(HashSet<T> A, HashSet<T> B)
    {
        return (A.All(x => B.Contains(x)) && B.All(x => A.Contains(x)));
    }
public bool Equals(哈希集A、哈希集B)
{
返回(A.All(x=>B.Contains(x))&&B.All(x=>A.Contains(x));
}
我很难找到一个好的GetHashCode方法。我知道

    public int GetHashCode(HashSet<int> obj)
    {
        return 1;
    }
public int GetHashCode(HashSet obj)
{
返回1;
}
这永远是一个选择,但我想要比这更好的。有人知道我该怎么做吗?在每个元素上使用ToString,对它们进行排序和联接,并获取结果字符串的哈希代码,这是一个坏主意吗?

摘要包含此处所需的一组操作:

  • 等于
  • GetHashode
您可以像所有.NET类一样获得默认比较器:使用


但是,据我所知,
HashSet
具有使用与调用操作的对象关联的
比较器的策略,即使它将另一个HashSet作为参数。

对于
Equals
,使用
返回A.SetEquals(B)更简单。您可以检查IEqualityComparer执行的操作,该操作由@dtb伟大的注释返回(几乎可以是答案本身)。