首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖GetHashCode

覆盖GetHashCode
EN

Stack Overflow用户
提问于 2010-11-22 05:27:57
回答 5查看 56.3K关注 0票数 33

如您所知,GetHashCode返回一个半唯一的值,该值可用于标识集合中的对象实例。作为一种好的做法,建议覆盖此方法并实现您自己的方法。

我的问题是-在处理自定义对象时是否覆盖此方法?如果是,您使用什么算法来生成唯一ID?

我在考虑生成一个GUID,然后从该标识符获取整数数据。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-22 06:07:52

当您覆盖GetHashCode()时,您还需要覆盖Equals()operator==operator!=。并且要非常小心地满足这些方法的所有要求。

指导方针是here on MSDN。最重要的引用:

在可变类型中重写运算符==不是一个好主意。

票数 27
EN

Stack Overflow用户

发布于 2010-11-22 05:33:04

在我个人的使用中,我也只在重写equals方法时重写。通常,我对我知道可能对其运行LINQ to objects查询或其他比较操作的对象执行此操作。

如果是LINQ to SQL实体或DTO对象,我通常会返回主键值。无论您返回什么,如果您不将值存储在本地,它可能会产生意外的结果。

HTH。

票数 1
EN

Stack Overflow用户

发布于 2010-11-22 05:43:42

我通常会覆盖数据类(即值语义有意义的类)的hashcode和相等性检查方法。看一看常见实现的this问题。如果您确实重写了hashcode,则重写等于。使用GUID是一个非常糟糕的想法,因为您希望两个不同实例但具有相同值的对象具有相同的哈希码,并且equals返回true。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4240467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档