编辑:这不再与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中的具体实例是相等的,我认为这必须行得通吗?
有什么想法建议吗?真的很想解决这个问题,而不必重做一堆代码库^^在此先感谢大家!