FCL的设计者认为,如果能将任何对象的任何实例放到哈希集合中,能带来很多好处。...类型、System.Collection.Generic.Dictionary类型以及其他的一些集合的实现中,要求两个对象必须有相等的哈希值才被视为相等。...简单分析下向集合中添加键值对的哈希过程:
1、向集合中添加键值对,第一步是获取键对象的哈希码
2、根据该哈希码(将哈希码作为标识),将键值对存储到指定的哈希桶中
再分析下根据键查找集合中的对应的值的过程...所以,需要修改哈西表中的键对象时,正确的做法是移出原来的键值对,
修改键对象,将新的键值对对象添加回哈希表....或ValueType的GetHashCode方法,因为两者的实现都与高性能哈希算法不沾边.
3、算法至少使用一个实例字段
4、理想情况下,算法使用的字段应该不可变,也就是说,字段应在对象构造时初始化,在对象生存期