C#怎么比较两个对象是否相等 Equals和GetHashCode重写方法

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

C#怎么比较两个对象是否相等 Equals和GetHashCode重写方法-第1张图片-佛山资讯网

在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)

标签: c# .net 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~