C# 平等比较公司<;类型>;GetHashCode和Equals

C# 平等比较公司<;类型>;GetHashCode和Equals,c#,dictionary,mvvm,hashcode,iequalitycomparer,C#,Dictionary,Mvvm,Hashcode,Iequalitycomparer,我有一个带有自定义比较器的类型字典(Dictionary),因为我们想存储两个给定类型之间的关系(对于MVVM模式),我需要帮助找到一种方法来让自定义EqualityComparer工作 在做一些研究时,我发现GetHashCode方法在Equals方法之前被调用,我如何才能得到正确的hashcodes?预期的行为是,如果我尝试从字典中获取一个“正方形”,并且其中已经有一个“GeometricsShape”,它将返回“GeometricsShape”的值,我找不到一种方法来对它进行哈希运算,从而

我有一个带有自定义比较器的类型字典(Dictionary),因为我们想存储两个给定类型之间的关系(对于MVVM模式),我需要帮助找到一种方法来让自定义EqualityComparer工作

在做一些研究时,我发现GetHashCode方法在Equals方法之前被调用,我如何才能得到正确的hashcodes?预期的行为是,如果我尝试从字典中获取一个“正方形”,并且其中已经有一个“GeometricsShape”,它将返回“GeometricsShape”的值,我找不到一种方法来对它进行哈希运算,从而给出预期的结果

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();
    }
}
公共类字典比较程序:EqualityComparer
{
公共覆盖布尔等于(类型x,类型y)
{            
返回x.IsAssignableFromType(y);
}
公共覆盖int GetHashCode(类型obj)
{
返回obj.GetHashCode();
}
}

不能让比较器使用“assignable from”作为等价操作

Equals
具有依赖它的类所假定的特定规则。如果您违反了规则,那么使用这种比较器的结果本质上就是随机洗牌

x.Equals(x)
返回true。
x.Equals(y)
返回与
y.Equals(x)

如果
(x.Equals(y)和&y.Equals(z))
返回true,则
x.Equals(z)
返回true。


我真的不知道如何解决您的特殊情况,可能如果您只需要将一种类型映射到另一种类型,您只需要使用
字典
,并将类型直接放到字典中。

这个问题需要一些澄清。您是否试图告诉字典,如果您访问了键X(不在字典上),并且它具有键X',它应该为后面的键返回值?如果是这样,您是否意识到您将无法添加可分配给字典中已存在的另一个键的键?我有一种感觉(尽管我可能错了),您试图使用错误的工具来完成此工作。你能解释一下你想用这个实现什么吗?MVVM和字典。那是一种代码气味。我首先建议您改用KeyedCollections,或者完全不需要使用KeyedCollections。至于你想把什么等同起来。。。一点也不确定。