

新闻资讯
技术学院必须同时重写Equals和GetHashCode以确保相等性判断与哈希一致性,例如Person类中按Name和Age比较时,若只重写Equals而未重写GetHashCode会导致Dictionary查找失败。
在C#中,GetHashCode 和 Equals 是定义在 Object 类中的两个方法,用于判断对象是否相等以及支持哈希集合(如 Dictionary、HashSet 等)的高效查找。
Equals 用于判断两个对象在逻辑上是否“相等”。默认实现是比较引用(即是否指向同一个内存地址),但对值类型或需要按字段比较的类,通常需要重写它来定义“内容相等”。
例如:
public override bool Equals(object obj)GetHashCode 返回一个整数,作为对象的哈希码。哈希集合(如 Dictionary 的 key、HashSet)使用这个值快速定位对象。如果两个对象通过 Equals 判断相等,它们的 GetHashCode 必须返回相同的值。
例如:
public override int GetHashCode()只重写其中一个会破坏“相等性契约”,导致哈希集合行为异常。
准确。简单说:Equals 定义“什么算相等”,GetHashCode 提供“快速查找依据”。两者必须保持一致。
假设你有一个 Person 对象用作 Dictionary 的 key:
var people = new Dictionary之后想通过一个内容相同的 Person 去取值:
var result = people[new Person("Alice", 25)]; // 报错:key not found原因:即使内容一样,若未重写 GetHashCode 和 Equals,两个新对象哈希码不同或比较失败,查不到数据。
基本上就这些。只要你在业务中把对象当值来比较,尤其是放进哈希集合,就必须同时重写这两个方法,保证逻辑一致。不复杂但容易忽略。