c#中关于gethashcode()的一点看法

3 篇文章 0 订阅

GetHashCode()具有很特殊的要求:相等的对象必须产生相等的散列值,并且散列值必须是对象不变的,并且是均衡的高效分布。所有这些只有对恒定类型才能满足。

这句话摘自:Effective C#中。

关于gethashcode方法,重写时应该遵守以上三个准则。我看了下,要想同时做到准确和高效是很难的。

准则一和二要求,产生的散列值依赖于对象,无论对象的属性等如何变化,只要它还是这个对象,他所产生的散列值就应该是一样。effective中对于值类型,产生散列值时推荐依赖于对象的不变对象(readonly等),纵然这样,也只能保证相同的对象生成相同的散列值(我还不敢完全确定),想要保证不同的对象生成不同的散列值似乎这样是是不可能的(虽然我没有找到有这样的明确要求,但我认为这样是必要的)。

总而言之,重写实现gethashcode是一件很麻烦的事情,只能做到对一个特定的范围来说是有效地吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值