什么可以导致dictionary.ContainsKey(dictionary.Keys.First())返回false?

时间:2013-07-17 22:13:44

标签: c# dictionary equals gethashcode

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

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

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

以下是ExceptionWrapper.EqualsExceptionWrapper.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();
}

1 个答案:

答案 0 :(得分:4)

当密钥有一个哈希码时,密钥首先被添加到Dictionary<,>。在此之后,对象被“变异”以给出哈希码是新数字的状态。

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

不要改变某个散列表中可能是某个键的对象,改变该对象的散列码。