2026-06-09 / C# / .NET Core

C# Equals、GetHashCode 与哈希集合语义

解释为什么自定义相等性时必须同时处理 Equals 和 GetHashCode,以及哈希集合如何使用它们。

C#.NET

C# Equals、GetHashCode 与哈希集合语义

如果对象要进入 DictionaryHashSet 这类结构,就不能只改 Equals 而不改 GetHashCode

哈希容器通常先用哈希值定位桶,再用相等性确认元素。如果两个逻辑相等的对象哈希值不同,就可能出现查找失败、删除失败或重复元素。

最佳实践

  • 自定义值相等时,同时实现 EqualsGetHashCode
  • 作为哈希键的对象最好不可变。
  • 不要用随机数或会变化的字段生成哈希值。
  • 能用 record 表达值对象时,可以优先考虑 record。
C# Equals、GetHashCode 与哈希集合语义 | Remi Resume