c#中,一般来说,重写了Equals方法,就要重写GetHashCode
关于Equals方法,一般都会按照自己的需求编写
关于GetHashCode,MS说的很清楚
两个相同的对象(即Equals方法返回true)必须返回相同的hash code
两个不相同的对象,返回true或者false都可以
如果两个相同的对象,hash code返回false了,结果会怎么样?
如上面代码,现在相同的对象一定返回相同的hashcode,因为他们的Id 相同,可以查看字典的元素
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iMxIDM5QDMkdTYlFTYkNjZ4ITZhZmZhNmYlRmNkZWN18CX4EzLclDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
字典只有两个元素,因为stu1和stu2是同一个对象,只能代表一个键
如果修改成这样的代码
现在的结果变成了3个元素,原因是stu1和stu2的哈希值不相同,就不需要再比较Equals方法的结果了