C#ContainsKey找不到字典中的所有密钥

时间:2019-04-23 12:02:21

标签: c# system.type

编辑:这不再与GetHashCode有关!

我正在用Unity / C#实现游戏,并且有一个效果字典,其中的键是System.Type效果,值是为该类型注册的效果列表。

当我想从字典中查询效果时,在我的字典被某些Json.Net逻辑反序列化之后,ContainsKey方法找不到任何键。 (在其他情况下有效)。但是,该词典确实包含带有正确哈希码的类型。

public bool GetEffects<T>(out List<T> queriedEffects) where T : Effect
{
  queriedEffects = null;
  int test = typeof(T).GetHashCode();
  foreach(Type t in activePersistantEffects.keys)
  {

     if (t.GetHashCode() == test)
     { Debug.Log("Hashcode is working"); } //Prints to log correctly

     if (t == typeof(T))
     { Debug.Log("== is working"); } //Does not print to log

     if (t.Equals(typeof(T)))
     { Debug.Log(".Equals() is working"); } //Does not print to log
  }
  if (activePersistantEffects.ContainsKey(typeof(T))) //Returns false
  {
      queriedEffects = activePersistantEffects.GetEffects<T>();
      return true;
  }
  return false;
}

既然散列代码对于KeyCollection中的具体实例是相等的,我认为这必须行得通吗?

有什么想法建议吗?真的很想解决这个问题,而不必重做一堆代码库^^在此先感谢大家!

编辑:尝试通过FullName属性进行调试后,我感到更加困惑。这些类型似乎是等效的: Method returns false even tough FullNames of types are equivalent.

0 个答案:

没有答案