(资料图片仅供参考)
在判断两个值或者两个对象是否相等时,通常会有重写Equals方法和GetHashCode方法,例如
由于Equals方法必须把两个对象搞清楚是等于还是不等于,所以可能效率不是最优的(Object.Equals通常包含类型的转换,可以参考IEquatable或IEqualityComparer),而GetHashCode不需要绝对弄清楚是否相等所以可以优化下效率。
比如比较两条狗是否一样,GetHashCode 只需要比较品种是否一样就可以了,如果品种一样,再用Equals进行性别,大小,身上毛的数量等彻底的比较。
当GetHashCode可以直接分辨出不相等时,Equals就没必要调用了,而当GetHashCode返回相同结果时,Equals方法会被调用从而确保判断对象是否真的相等。
GetHashCode 的方法设计不需要面面俱到,就想CPU缓存命中一样,字典的散列命中算法一样,没必要一次就命中(当然如果可以最好)。
关键词: