必须同时重写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()只重写其中一个会破坏“相等性契约”,导致哈希集合行为异常。
以前写了十天学会ASP,十天学会ASP.NET什么的,现在想想再写个PHP吧,也算比较全了。 PHP的调试方法我这里就不说了,外面很多文章都有介绍,也有很多不同的组合。我这里暂时是以 Apache web server 和 MY SQL 作为WEB服务器和数据库,在php-4.3.3下的环境做的程序。当然要简单的构建和访问查看数据库 PHPMYADMIN 不可少。
482
简单说:Equals 定义“什么算相等”,GetHashCode 提供“快速查找依据”。两者必须保持一致。
假设你有一个 Person 对象用作 Dictionary 的 key:
var people = new Dictionary<Person, string>();之后想通过一个内容相同的 Person 去取值:
var result = people[new Person("Alice", 25)]; // 报错:key not found原因:即使内容一样,若未重写 GetHashCode 和 Equals,两个新对象哈希码不同或比较失败,查不到数据。
基本上就这些。只要你在业务中把对象当值来比较,尤其是放进哈希集合,就必须同时重写这两个方法,保证逻辑一致。不复杂但容易忽略。
以上就是C#的GetHashCode和Equals方法是什么?为什么需要同时重写它们?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号