c# - 什么会导致 dictionary.ContainsKey(dictionary.Keys.First()) 返回 false?

标签 c# dictionary equals gethashcode

dictionary.Keys.First().GetHashCode() == dictionary.Keys.First().GetHashCode()返回真 dictionary.Keys.First() == dictionary.Keys.First()返回真

缺少什么?为什么字典找不到这个对象?

字典类型:Dictionary<ExceptionWrapper<Exception>, List<int>> .

这里是 ExceptionWrapper.Equals 的实现和 ExceptionWrapper.GetHashCode :

public override int GetHashCode() {
  return (typeof(TException).FullName + exception.Message + exception.StackTrace).GetHashCode();
}

public override bool Equals(object obj) {
  return 
    obj is ExceptionWrapper<TException>
&& (obj as ExceptionWrapper<TException>).GetHashCode() == GetHashCode();
}

最佳答案

key 首先添加到 Dictionary<,>当它有一个哈希码时。之后,该对象被“变异”以提供哈希码是某个新数字的状态。

Dictionary<,>因此处于无效状态。

不要改变可能是某个哈希表中某处键的对象,以改变该对象的哈希码的方式。

关于c# - 什么会导致 dictionary.ContainsKey(dictionary.Keys.First()) 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17711195/

相关文章:

c# - 如何直接显示最近上传的视频?

Java StringTokenizer 和存储数组

c# - 在 c# exe 和 c++ dll 之间使用 Mutex

java - 参数化类型(如 Class<)的等效 C# 是什么?在 Java 中扩展 Throwable>?

java - 在 Java 中合并两个 Map 值,如果键相同,则附加在 Java 7 或 Java 8 中不会覆盖的值

python - 在 Python 中将值附加到字典

python - 如何使用字典值在 Python 中进行正则表达式替换,其中键是来自同一字符串的另一个匹配对象

iphone - 保留、分配、属性...让您的 Obj-c 生活更轻松的主题!

java - BST 相等性检查

c# - 队列有时会损坏