为此,System.Object提供了GetHashCode,它能获取任何对象的Int32哈希码.如果你定义的类型重写了Equals方法,还应重写GetHashCode方法。...如果你的类型重写了Equals方法,但是没有重写GetHashCode方法,C#编译器会发出一条警告,提示你重写GetHashCode方法,之所以重写Equals方法的同时要求重写GetHashCode...所以重写Equals就必须重写GetHashCode,确保相等性算法和对象哈希码算法一致....但是,采用这个算法来存储和查找键,一旦修改了一个键对象,键对应的哈希码并不会进行相应的更新,该哈希码对应的键值对还挂在这个hash码下,所以这就导致了集合再也找不到这个对象。...选择算法来计算类型实例的哈希码时,请遵守一下规则:
1、这个算法要提供良好的随机分布,使哈希表获得最佳的性能
2、可在算法中调用基类的GetHashCode方法,并包含它的返回值,但一般不要调用Object