Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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#-无法找到哈希集包含比较检查的确认答案_C#_Hashset_Equality - Fatal编程技术网

C#-无法找到哈希集包含比较检查的确认答案

C#-无法找到哈希集包含比较检查的确认答案,c#,hashset,equality,C#,Hashset,Equality,我试图找出C#如何在哈希集中比较对象以获得相等性 我在这里找不到任何东西: 只有在谈到stackoverflow时,我才知道它使用了Equals()和getHashCode() 无论如何,我计划实施这两种方法,但我的问题是: 要了解HashSet实际上是如何比较对象的,您会怎么做?它使用Equals比较对象是否相等。它使用GetHashCode确定将它们放在哪个bucket中 更一般地说,HashSet使用传递给其构造函数的IEqualityComparer来完成这两项工作。如果未指定,它将使用

我试图找出C#如何在哈希集中比较对象以获得相等性

我在这里找不到任何东西:

只有在谈到stackoverflow时,我才知道它使用了Equals()和getHashCode()

无论如何,我计划实施这两种方法,但我的问题是:


要了解HashSet实际上是如何比较对象的,您会怎么做?

它使用
Equals
比较对象是否相等。它使用
GetHashCode
确定将它们放在哪个bucket中


更一般地说,HashSet使用传递给其构造函数的
IEqualityComparer
来完成这两项工作。如果未指定,它将使用
EqualityComparer.Default
调用对象的
GetHashCode()
IEquatable.Equals()
方法(或者
object.Equals()
,如果该类型未实现
IEquatable
)。

只要体验一下哈希表通常是如何工作的,以及IEqualityComparer在.Net中是如何使用的。我还用反射器验证了它。反射器,嗯,谁想到要这么做;)什么是反射器?为什么msdn文档网站很难理解?:)用于查看任何未混淆的.NET程序集的代码的工具。Reflector是.NET的反汇编程序。基本上我告诉你的是一个实现细节;就类的契约而言,它基本上只是“它使用了一个IEqualityComparer,所以应该假设GetHashCode和Equals都是必需的”。值得一读:我发现文档也有点混乱,因此,我编写了一个简单的控制台应用程序,其中包含一个类,该类包含Equals和GetHashCode覆盖和/或IEquality实现的各种组合,每个类中都包含简单的调试语句。然后,我向HashSet添加了一组对象,并查看了调试输出,以确定HashSet正常工作的最低要求。这有助于澄清MS文档的意图。我还运行了从IEquatable基类或接口继承类的测试。