gpt4 book ai didi

c# - C# 中的字典类 - 两个对象的相等性

转载 作者:太空狗 更新时间:2023-10-29 23:53:52 25 4
gpt4 key购买 nike

我有一个名为 Class1 的类我重写了它的 Equals 函数现在我有一个字典实例我向其中添加了一个名为 OBJ1 的 Class1 实例。我有另一个名为 OBJ2 的 Class1 实例。代码为 OBJ1.Equals(OBJ2) 返回 true。但我在字典中找不到 OBJ2。

伪代码

Class1 OBJ1 = new Class1(x, y, z);
Class1 OBJ2 = new Class1(a, b, c);
Dictionary<Class1, int> dic1 = new Dictionary<Class1, int>();
dic1.Add(OBJ1, 3);
OBJ1.Equals(OBJ2) -------------> return true
Dictionary.ContainsKey(OBJ2) --------------> return false

为什么会这样?非常欢迎任何帮助

最佳答案

2 种可能性:

  1. GetHashCode没有被正确覆盖。你可能想看看 Why is it important to override GetHashCode when Equals method is overriden in C#?
  2. OBJ1在将其添加到字典后以影响其哈希码的方式发生了变异。在这种情况下,它所在的桶将不再正确 - ContainsKey最终会在不同的桶中寻找它。

来自 Dictionary<TKey, TValue> :

As long as an object is used as a key in the Dictionary, it must not change in any way that affects its hash value.

关于c# - C# 中的字典类 - 两个对象的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4595684/

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