我在更新此词典之前和之后获得相同的哈希码。
我使用以下方法打印哈希码:
MessageBox.Show(dict.GetHashCode().ToString());
有人可以帮我吗?
答案 0 :(得分:3)
这是设计的。引用the documentation:
哈希码是一个数值,用于插入和标识基于哈希的集合中的对象[...]
因此,如果您的dict
本身包含在某些字典中,则其哈希码不会更改至关重要,即使其内容发生更改 。文档也很清楚:
通常,对于可变引用类型,只应在以下情况下覆盖GetHashCode:
- 您可以从不可变的字段计算哈希码;或
- 当对象包含在依赖于其哈希码的集合中时,您可以确保可变对象的哈希码不会更改。
否则,您可能会认为哈希表中的可变对象丢失了。 [...]
答案 1 :(得分:1)
您必须继承Dictionary<K,V>
,覆盖GetHashCode()
并合理实施。默认实现不会这样做。
另外请记住,您还必须覆盖并实施Equals()
。
答案 2 :(得分:0)
Equals(Object)
的{{1}}方法不测试两个引用是否引用内容相同的字典,而是测试引用是否引用相同的字典。如果某个特定字典是自程序启动以来创建的第592个对象,则其Dictionary
方法将测试传入引用是否标识自程序启动以来创建的第592个对象。在字典中添加或删除项目不会影响Equals
认为与其自身相等的引用集(它将所有引用标识为第592个对象视为相等,并且将不相等的所有引用视为不相等)和因此,不应该影响哈希码。