3

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

少了什么东西?为什么字典找不到这个对象?

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

下面是ExceptionWrapper.Equalsand的实现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();
}
4

1 回答 1

4

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

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

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

于 2013-07-17T22:24:45.840 回答