覆盖GetHashCode

Den*_*sky 31 c# algorithm methods overriding gethashcode

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

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

我正在考虑生成GUID,然后从该识别器获取整数数据.

小智 29

If you use resharper it can generate the GetHashCode(), Equals and operator method bodies for you.

Access this menu by pressing Alt+Insert.

http://www.jetbrains.com/resharper/webhelp/Code_Generation__Equality_Members.html

  • 更简单的方法是不插入如此多的样板文件,并在类更改时保持最新:http://eamonnerbonne.github.io/ValueUtils/ (2认同)

Hen*_*man 26

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

这些指南在MSDN上.最重要的是:

在非不可变类型中覆盖operator ==不是一个好主意.

  • 字符串是不可变的,你从来没有使用过`name =="x"`? (3认同)
  • 重点是,在重新分配变量之前,依赖==保持真实是很自然的; 突变副作用改变==的过去含义是不直观的,因为默认情况下支持比较运算符的任何东西都是值类型或不可变的.当你说var ="new value"时,这些只会改变值,这显然意味着前面的==可能不再是真的.引用类型可以从其他代码和方法改变状态,在其他地方改变对象可以改变相等性.Equals不提供相同的期望,因为它是方法定义,而不是语法. (3认同)