繁体   English   中英

字典的GetHashCode <string,List<string> &gt;?

[英]GetHashCode for Dictionary<string,List<string>>?

更新此字典前后,我得到相同的哈希码。

我正在使用以下方式打印哈希码:

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

有人可以帮我吗?

这是设计使然。 引用文档

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

因此,如果您的dict 本身包含在某个字典中,那么即使其内容发生变化,其哈希码也必须保持不变,这一点至关重要。 文档也很清楚:

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

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

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

您将必须继承Dictionary<K,V> ,重写GetHashCode()并合理地实现它。 默认实现只是不这样做。

还要记住,您还必须重写和实现Equals()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM