gpt4 book ai didi

c# - EqualityComparer GetHashCode和等于

转载 作者:行者123 更新时间:2023-12-03 10:26:30 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com