GetHashCode的目的是什么?

时间:2013-06-19 17:05:58

标签: c#

为什么人们使用GetHashCode及其用途。我对这个主题进行了谷歌搜索,并且不清楚为什么以及何时程序员使用这种方法。有人可以解释这个GetHashCode方法吗?

3 个答案:

答案 0 :(得分:5)

该方法的目的是为哈希表创建一个密钥。

Eric Lippert的一篇非常好的文章:

http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/

  

GetHashCode用于什么?

     

设计只对一件事有用:将对象放在哈希中   表。因此这个名字。

     

为什么我们首先在Object上使用此方法?

     

类型系统中的每个对象都应该是完全合理的   提供GetType方法;数据描述自身的能力是关键   CLR类型系统的功能。每个对象都有道理   应该有一个ToString,以便它能够打印出来   为了调试目的,将自身表示为字符串。它似乎   合理的对象应该能够与其他对象进行比较   平等的对象。但为什么每个对象都应该如此呢   应该能够哈希自己插入哈希表吗?似乎   像一个奇怪的事情要求每个对象都能做到。

     

我想如果我们今天从头开始重新设计类型系统,   哈希可能会以不同的方式完成,也许是IHashable   接口。但是当设计CLR型系统时,没有   泛型类型,因此需要一个通用的哈希表   能存储任何物体。

答案 1 :(得分:3)

From MSDN:

  

哈希码是一个数值,用于在相等测试期间标识对象。它还可以作为集合中对象的索引

使用GetHashCode的返回值来确定两个对象是否相等于在对象类型上调用Equals的默认实现更快。

请参阅Dictionary(Of TKey, TValue)Hashtable Class,因为他们都使用哈希码来比较集合中的元素。某些LINQ函数(如Enumerable.Distinct)也使用哈希码。

答案 2 :(得分:0)

主要是为了确保这是必需的对象。例如,如果你有相同值的对象但它们不相同因为内存中的不同位置并且代表完全不同的对象(同一类和相同值的两个不同实例)。当你想更新或删除那个对象时,你可以做哈希来验证你想要更新的必需对象......这是我的情况

如果我们使用其他类型和情况的休眠,我们使用这个