.net里的提供了默认的GetHashCode()方法, 但是免费的东西不是好东西,
对于reference类型来说,hashcode的实现类似于自增长的计数器,如果数量不是很大,区间分布集中在前端,这样就影响了hash算法的性能。
对于value类型来说,算法都不一定是你想要的,因为它默认返回第一个字段的hashcode,设想如果你有两个key字段,当第一个字段相等但是第二个字段不相等时,他们的hashcode却相等!
所以必须我们自己动手:一般用异或两个引用类型的hashcode实现:
1 struct MyKey
2 {
3 object Field1;
4 object Field2;
5
6 public MyKey(object field1,
7 object field2)
8 {
9 Field1= field1;
10 Field2= field2;
11 }
12
13 public override int GetHashCode()
14 {
15 return Field1.GetHashCode() ^ Field1.GetHashCode();
16 }
17 }
2 {
3 object Field1;
4 object Field2;
5
6 public MyKey(object field1,
7 object field2)
8 {
9 Field1= field1;
10 Field2= field2;
11 }
12
13 public override int GetHashCode()
14 {
15 return Field1.GetHashCode() ^ Field1.GetHashCode();
16 }
17 }