【发布时间】:2016-11-21 23:03:03
【问题描述】:
我有一个带有自定义比较器的类型字典 (Dictionary),因为我们想要存储 2 个给定类型之间的关系(对于 MVVM 模式),我需要帮助想出一种让自定义 EqualityComparer 工作的方法。
做了一些研究,我发现 GetHashCode 方法在 Equals 方法之前被调用,我怎样才能正确获取哈希码?,如果我尝试从字典中获取“Square”,则预期的行为是,它有“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();
}
}
【问题讨论】:
-
这个问题需要澄清一下。您是否试图告诉字典,如果您访问键 X(不在字典上)并且它具有键 X',它应该返回后者的值?如果是这样,您是否知道您将无法添加可分配给已在 Dictionary 中的另一个键的键?
-
我有一种感觉(虽然我可能是错的)你试图使用错误的工具来完成这项工作。你能解释一下你想用这个实现什么吗?
-
MVVM 和字典。那是代码的味道。我首先建议您改用 KeyedCollections,或者完全消除对键控集合的需要。至于您要等同于什么……完全不确定。
标签: c# dictionary mvvm hashcode iequalitycomparer