Return of .NET  
宠辱不惊,静观堂前花开花落;去留无意,漫随天外云卷云舒。

.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         }

 

posted on 2011-03-24 22:13  消化酶  阅读(620)  评论(1编辑  收藏  举报