栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

C#中的GetHashCode准则

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#中的GetHashCode准则

答案大部分是,这是有效的准则,但可能不是有效的规则。它也不能说明全部故事。

需要说明的是,对于可变类型,您不能将哈希码基于可变数据,因为两个相等的对象必须返回相同的哈希码,并且哈希码在对象的生存期内必须有效。如果哈希码发生更改,最终将导致对象丢失在哈希集合中,因为该对象不再存在于正确的哈希容器中。

例如,对象A返回哈希1。因此,它进入哈希表的bin 1。然后,更改对象A,使其返回2的哈希值。当哈希表查找它时,它将在bin 2中查找并且找不到它-
该对象在bin 1中是孤立的。这就是为什么哈希码必须 在对象的整个生命周期中都 不会改变,而编写GetHashCode实现的原因之一就是痛苦。

更新
Eric Lippert发布​​了一个博客,该博客提供了有关的出色信息

GetHashCode

其他更新
我在上面做了几处更改:

  1. 我对准则和规则进行了区分。
  2. 我打通了“对象的生命周期”。

指导方针只是指导,不是规则。实际上,

GetHashCode
只有在事物期望对象遵循准则时(例如将其存储在哈希表中时),才必须遵循这些准则。如果您从不打算在哈希表中使用对象(或任何其他依赖的规则
GetHashCode
),则您的实现无需遵循准则。

当看到“对象的生存期”时,应阅读“对象需要与哈希表协作的时间”或类似内容。像大多数事情一样,

GetHashCode
是要知道何时违反规则。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573247.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号