我需要计算几种类型实例的内部哈希码(某些类型是相互派生的)。这里有两个方面是动态的,可以独立变化。只有请求散列的客户端知道要使用什么散列算法以及要包含什么属性。
- 用于哈希计算的实际算法可能会改变。
- 哈希计算应考虑每种类型的哪些成员可以更改。
您将如何围绕这些要求设计您的类型?
我需要计算几种类型实例的内部哈希码(某些类型是相互派生的)。这里有两个方面是动态的,可以独立变化。只有请求散列的客户端知道要使用什么散列算法以及要包含什么属性。
您将如何围绕这些要求设计您的类型?
以下是 Eric Lippert 的 GetHashCode() 指南。
http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/
摘录:
规则:当对象包含在依赖于哈希码保持稳定的数据结构中时,GetHashCode 返回的整数绝不能更改
虽然很危险,但允许对象的哈希码值随着对象的字段发生变异而发生变异是允许的。如果你有这样一个对象并且你把它放在一个哈希表中,那么改变对象的代码和维护哈希表的代码需要有一些商定的协议,以确保对象在它存在时不会发生变异哈希表。该协议的外观取决于您。
简而言之,如果生成哈希码的算法可以改变,那么你需要确保当对象在你的集合中时它不会改变。