必须同时重写Equals和GetHashCode,因为哈希容器依赖二者协同工作:相等对象的GetHashCode必须相同,Equals用于最终确认;若只重写Equals,可能导致字典中无法查找对象。

在C#中,判断两个对象是否“逻辑相等”,不能只靠 == 或默认的 Equals()——尤其是自定义类。关键在于正确重写 Equals(object) 和 GetHashCode(),二者必须成对出现、逻辑一致。否则可能在字典、哈希集里出错,或让相等判断结果不符合预期。
为什么必须同时重写 Equals 和 GetHashCode
这两个方法是 .NET 哈希容器(如 Dictionary<tkey tvalue></tkey>、HashSet<t></t>)正常工作的基础:
-
GetHashCode()用于快速分桶:如果两个对象相等,它们的哈希码 必须相同 -
Equals()用于精确比对:哈希码相同只是“可能相等”,最终靠Equals()确认 - 反之,如果
GetHashCode()不一致,Equals()根本不会被调用(直接判为不等) - 若只重写
Equals()而忽略GetHashCode(),对象放进Dictionary后可能查不到自己
重写 Equals 的基本步骤
以一个简单 Person 类为例,按规范重写 Equals(object obj):
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~