C# 重写(override)Equals 和 GetHashCode
Equals 和 GetHashCode Equals 每个实现都必须遵循以下约定: 自反性(Reflexive): x.Equals(x) 必须返回 true 对称性(Symmetric): x.Equals(y) 为 true 时,y.Equals(x) 也为 true 传递性(Transitive): 对于任何非 null 的应用值 x, y 和 z,如果 x.Equals(y) 返回 true,并且 y.Equals(z) 也返回true,那么 x.Equals(z) 必须返回 true 一致性(Consistence): 如果多次将对象与另一个对象比较,结果始终相同。只要未修改 x 和 y 的应用对象,x.Equals(y) 连续调用 x.Equals(y) 返回相同的值 非null(Non-null): 如果 x 不是 null,y 为 null,则 x.Equals(y) 必须为 false GetHashCode: 两个相等对象根据 equals 方法比较时相等,那么这两个对象中任意一个对象的 GetHashCode 方法都必须产生同样的整数 在我们未对对象进行修改时,多次调用 GetHashCode 使用返回同一个整数。在同一个应用程序中多次执行,每次执行返回的整数可以不一致 如果两个对象根据 Equals 方法比较不相等时,那么调用这两个对象中任意一个对象的 GetHashCode 方法,不一同的整数。但不同的对象,产生不同整数,有可能提高散列表的性能 以上内容摘自@冯辉 的博客: https://www....