C# Dictionary, GetHashCode(), Equals() 的协作关系

本文深入探讨了GetHashCode()和Equals()在Dictionary<Object,Value>中的工作原理。当向字典中添加键值对时,GetHashCode()用于检查是否存在相同的键,若hashcode相同,则调用Equals()进一步确认对象是否相等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GetHasCode() 和 Equals() 是 Object (泛指所有的引用类型) 的两个函数,它们和 Dictionary<Object, Value> 之间是这样协作的: 

 

已知一个已 Object 为主键的 Dictionary<Object, Value>, 当加入一对键值的时候

  1. GetHashCode()会被调用。用于配对是否有相同的键值存在于 Dictionary<Object, Value>
  2. 如果有相同的 hash code, Equals()会被调用, 判断具有相同 Hash Code 的 Object是否相同

 

以下是通过代码来说明以上的叙述

首先创建一个类 MyObject, 并且在类里面重写了GetHashCode() 和 Equals()

PrepareData() 准备了需要加入 Dictionary<object, double> 的数据

当运行 CreateDictionary(List<object> objects, List<double> values) 时候, 每次往Dictionary<object, double> 加入键值对,GetHashCode()会被调用, 由于每次都返回 100, Equals()都会被调用去检验两个 object 是否相同, 但由于 object 本身是不相同的, 所以键值对最后都会被加入Dictionary<object, double>,并且输出结果是 100.

我们可以通过 Call Stack 来看看运行时候 的情况, 也可以设置断点。

 

结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值