GetHashCode for Dictionary <string,list <string>&gt;?</string,list <string>

时间:2013-11-17 21:49:15

标签: c# hashcode

我在更新此词典之前和之后获得相同的哈希码。

我使用以下方法打印哈希码:

MessageBox.Show(dict.GetHashCode().ToString());

有人可以帮我吗?

3 个答案:

答案 0 :(得分:3)

这是设计的。引用the documentation

  

哈希码是一个数值,用于插入和标识基于哈希的集合中的对象[...]

因此,如果您的dict 本身包含在某些字典中,则其哈希码不会更改至关重要,即使其内容发生更改 。文档也很清楚:

  

通常,对于可变引用类型,只应在以下情况下覆盖GetHashCode:

     
      
  • 您可以从不可变的字段计算哈希码;或
  •   
  • 当对象包含在依赖于其哈希码的集合中时,您可以确保可变对象的哈希码不会更改。
  •   
     

否则,您可能会认为哈希表中的可变对象丢失了。 [...]

答案 1 :(得分:1)

您必须继承Dictionary<K,V>,覆盖GetHashCode()并合理实施。默认实现不会这样做。

另外请记住,您还必须覆盖并实施Equals()

答案 2 :(得分:0)

Equals(Object)的{​​{1}}方法不测试两个引用是否引用内容相同的字典,而是测试引用是否引用相同的字典。如果某个特定字典是自程序启动以来创建的第592个对象,则其Dictionary方法将测试传入引用是否标识自程序启动以来创建的第592个对象。在字典中添加或删除项目不会影响Equals认为与其自身相等的引用集(它将所有引用标识为第592个对象视为相等,并且将不相等的所有引用视为不相等)和因此,不应该影响哈希码。