我有一个带有自定义比较器的类型字典(Dictionary),因为我们想要存储两种给定类型之间的关系(对于MVVM模式),我需要帮助提出一种方法来使自定义EqualityComparer工作。
进行一些研究我发现GetHashCode方法在Equals方法之前被调用,我怎样才能使哈希码正确?如果我试图得到一个" Square&#34,它的预期行为是什么? ;从我的字典中,它有一个" GeometricShape"已经在其中,它返回" GeometricShape"的值,我找不到以我给出预期结果的方式散列它的方法
public class DictionaryComparer : EqualityComparer<Type>
{
public override bool Equals(Type x, Type y)
{
return x.IsAssignableFromType(y);
}
public override int GetHashCode(Type obj)
{
return obj.GetHashCode();
}
}
答案 0 :(得分:2)
您不能使用“assignable from”作为等效操作的比较器。
Equals
具有依赖于它的类所采用的特定规则。如果你打破规则,使用这种比较器的结果基本上是随机的随机播放。
请参阅Guidelines for Overloading Equals()
x.Equals(x)
返回truex.Equals(y)
返回与y.Equals(x)
相同的值 如果(x.Equals(y) && y.Equals(z))
返回true,则x.Equals(z)
返回true。
我不确定如何解决您的具体情况,可能只需要将一种类型映射到另一种类型,只需要Dictionary<Type,Type>
并将类型直接放到它上面。