gpt4 book ai didi

c# - Dictionary 什么时候调用 TKey.Equals()?

转载 作者:行者123 更新时间:2023-11-30 19:22:10 26 4
gpt4 key购买 nike

只是覆盖 TKey 中的 Equals 没有帮助。

public override bool Equals(object obj)
{ /* ... */ }

... Equals() 永远不会被调用...

最佳答案

当您进行字典查找时,这是事情发生的顺序:

  1. 字典使用 TKey.GetHashCode 计算存储桶的哈希值。
  2. 然后检查使用该存储桶的所有哈希值,并对各个对象调用 Equals 以确定匹配项。

如果桶永远不匹配(因为 GetHashCode 没有被覆盖),那么您将永远不会调用 Equals。这就是为什么如果你实现其中一个你应该总是实现这两个函数的部分原因 - 如果你想在散列集合中使用你的对象,你应该重写这两个函数(比调用 base.GetHashCode() 更有意义)。

如果您正在实现一个类,您应该实现一个 GetHashCode 例程,该例程为相等的项目返回相同的哈希码。理想情况下,您希望尽可能为不相等的项目返回不同的哈希码,因为这将使您的字典查找速度更快。

您还应该以正确检查相等实例的方式实现 Equals。

类(引用类型)的默认实现只是比较引用本身。默认情况下,具有完全相同值的两个实例在 Equals 上返回 false(因为它们具有不同的引用)。默认情况下,多个实例也将始终返回不同的哈希码。

关于c# - Dictionary<TKey, TValue> 什么时候调用 TKey.Equals()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com