如您所知,GetHashCode返回一个半唯一的值,该值可用于标识集合中的对象实例。作为一种好的做法,建议覆盖此方法并实现您自己的方法。
我的问题是-在处理自定义对象时是否覆盖此方法?如果是,您使用什么算法来生成唯一ID?
我在考虑生成一个GUID,然后从该标识符获取整数数据。
发布于 2010-11-22 06:07:52
当您覆盖GetHashCode()时,您还需要覆盖Equals()、operator==和operator!=。并且要非常小心地满足这些方法的所有要求。
指导方针是here on MSDN。最重要的引用:
在可变类型中重写运算符==不是一个好主意。
发布于 2010-11-22 05:33:04
在我个人的使用中,我也只在重写equals方法时重写。通常,我对我知道可能对其运行LINQ to objects查询或其他比较操作的对象执行此操作。
如果是LINQ to SQL实体或DTO对象,我通常会返回主键值。无论您返回什么,如果您不将值存储在本地,它可能会产生意外的结果。
HTH。
发布于 2010-11-22 05:43:42
我通常会覆盖数据类(即值语义有意义的类)的hashcode和相等性检查方法。看一看常见实现的this问题。如果您确实重写了hashcode,则重写等于。使用GUID是一个非常糟糕的想法,因为您希望两个不同实例但具有相同值的对象具有相同的哈希码,并且equals返回true。
https://stackoverflow.com/questions/4240467
复制相似问题