gpt4 book ai didi

c# - Dictionary 如何处理未实现 Equals 和 GetHashCode 的键对象?

转载 作者:太空狗 更新时间:2023-10-30 01:11:22 25 4
gpt4 key购买 nike

如果我将键对象放入未实现 Equals 和 GetHashCode 的 Dictionary 中,Dictionary ContainsKey 如何工作?通过检查引用是否相等?

谢谢

最佳答案

基础 Object 类实现了 EqualsGetHashCode .默认情况下,所有类都继承自 Object。字典将只使用这些实现。

Equals 的默认实现测试对象引用,在大多数情况下这对您的字典来说可能没问题。

GetHashCode 的基本实现相当幼稚,事实上,甚至文档也指出:

The default implementation of the GetHashCode method does not guarantee unique return values for different objects.

因此,如果您打算将对象用作字典或哈希表键,建议您自己覆盖它。

关于它是如何工作的。请记住,GetHashCode 实际上对于字典的实现并不重要。允许哈希码发生冲突,这就是重点。哈希码只是用来帮助定位一个对象,它是用来检查对象最终是否正确的相等性测试。为了论证,我们只说每个对象只返回一个散列码 1。它们最终都会出现在字典中的同一个容器中,可能以某种相当随机的顺序(可能是插入的顺序)并且它会退回到使用 Equals 来验证对象身份。效率不高,但可以正常工作。

因此,如果您正在寻找效率,您应该考虑重写 GetHashCode,但如果它只是一个小字典并且效率不是太重要,那么将它保留为默认值就可以了。

[所有通常的考虑都适用。最好不要为可变对象覆盖 GetHashCode,并 100% 确保为 Equals() 返回 true 的对象返回相同的哈希码。]

关于c# - Dictionary<T> 如何处理未实现 Equals 和 GetHashCode 的键对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2771971/

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