c# - EqualityComparer <Type> GetHashCode和等于

标签 c# dictionary mvvm hashcode iequalitycomparer

我有一个带有自定义比较器的类型字典(字典),因为我们要存储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();
    }
}

最佳答案

您不能使用将“assignable from”用作等效操作的比较器。
Equals具有依赖于它的类所假定的特定规则。如果违反了规则,使用这种比较器的结果本质上将是随机混洗。

参见Guidelines for Overloading Equals()

x.Equals(x) returns true.
x.Equals(y) returns the same value as y.Equals(x)
if (x.Equals(y) && y.Equals(z)) returns true, then x.Equals(z) returns true.



我不太确定如何解决您的特殊情况,也许如果您只需要将一种类型映射到另一种类型,则只需使用Dictionary<Type,Type>并将类型直接放入其中即可。

关于c# - EqualityComparer <Type> GetHashCode和等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40730997/

相关文章:

c# - 通过 sql datareader 获取时字符串数据被截断

function - 获取不同内容 map 的所有 map 键[字符串]

api - 谷歌词典 API 不起作用——还有其他解决方案吗?

wpf - 何时在 WPF 中对命令使用事件?

c# - 如何在 gridview 中格式化数字字符串?

c# - 从数据库中选择不同的类别

c# - 如何在 Visual Studio (C#) 中找到窗体上的控件

python - 能够使用值返回嵌套字典? Django

swift - 使用泛型将额外的 props 注入(inject)到 View 模型中

wpf - 带有 IoC 容器的 WPF 中的 UnitOfWork 生命周期