为什么我们在对象模型项目中需要 GetHashCode() 函数? [复制]

2023-12-29

可能的重复:
为什么在 C# 中重写 Equals 方法时重写 GetHashCode 很重要? https://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c

我正在研究我的以下课程Object Model并且无法理解添加的意义GetHashCode() in the Class.

样本班

public class SampleClass
{

    public int ID { get; set; }
    public String Name { get; set; }
    public String SSN_Number { get; set; }

    public override bool Equals(Object obj)
    {
        if (obj == null || GetType() != obj.GetType())
            return false;

        SampleClass cls = (SampleClass)obj;
        return (ID == cls.ID) &&
               (Name == cls.Name) &&
               (SSN_Number == cls.SSN_Number);
    }

    public override int GetHashCode()
    {
        return ID.GetHashCode() ^ Name.GetHashCode() ^ SSN_Number.GetHashCode();
    }
}

假设我有一个列表Sample Class对象,我想获得一个特定的索引。然后Equals()可以帮助我获得该记录。我为什么要使用GetHashCode() ?


您需要处理这两个问题,因为许多集合实现(例如 Dictionary)都使用 GetHashCode() 与 Equals 方法配合使用。重要的是,如果您重写 Equals 的实现,那么您必须以这样的方式重写 GetHashCode:根据您的新实现,任何两个 Equal 对象也必须返回相同的哈希码。

如果不这样做,那么它们将无法在词典中正常工作。一般来说,这并不难。我经常这样做的一种方法是获取用于相等的对象的属性,并将它们连接到一个 String 对象中,然后返回 String.GetHashCode。

String 有一个非常好的 GetHashCode 实现,它为各种值返回广泛的整数,从而在稀疏集合中实现良好的分布。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们在对象模型项目中需要 GetHashCode() 函数? [复制] 的相关文章

随机推荐