c#中Equals方法和GetHashCode
c#中,一般来说,重写了Equals方法,就要重写GetHashCode
关于Equals方法,一般都会按照自己的需求编写
关于GetHashCode,MS说的很清楚
- 两个相同的对象(即Equals方法返回true)必须返回相同的hash code
- 两个不相同的对象,返回true或者false都可以
如果两个相同的对象,hash code返回false了,结果会怎么样?
class Program { static void Main(string[] args) { var stu1 = new Student(1, "Zhangsan"); var stu2 = new Student(2, "Lisi"); var stu3 = new Student(1, "Zhangsan-rename"); var dic = new Dictionary<Student, string>(); dic[stu1] = "aaa"; dic[stu2] = "bbb"; dic[stu3] = "ccc"; } } public class Student { public Student(int id, string name) { Id = id; Name = name; } public int Id { get; set; } public string Name { get; set; } public override bool Equals(object obj) { return obj is Student student && this.Id == student.Id; } public override int GetHashCode() { //return DateTime.Now.Millisecond; return this.Id; } }
如上面代码,现在相同的对象一定返回相同的hashcode,因为他们的Id 相同,可以查看字典的元素
字典只有两个元素,因为stu1和stu2是同一个对象,只能代表一个键
如果修改成这样的代码
public override int GetHashCode() { return DateTime.Now.Millisecond; //return this.Id; }
现在的结果变成了3个元素,原因是stu1和stu2的哈希值不相同,就不需要再比较Equals方法的结果了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!