如何实现类中没有任何ID的GetHashCode

本文关键字:任何 ID GetHashCode 何实现 实现 | 更新日期: 2023-09-27 18:11:41

例如class

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

如何在这个类中重写GetHashCode ?

如何实现类中没有任何ID的GetHashCode

你应该基于你的对象的哈希码计算的不可变字段,如果你可以使Person的FirstName和LastName字段不可变,你可以使用以下模式基于Josh Bloch的建议:

public override int GetHashCode()
{
    int hash = 17;
    hash = hash * 31 + FirstName.GetHashCode();
    hash = hash * 31 + LastName.GetHashCode();
    return hash;
}
public override int GetHashCode()
    {
        return String.Concat(FirstName, LastName).GetHashCode();
    }

你可以这样做:

public override int GetHashCode()
{
    return FirstName.GetHashCode() ^ LastName.GetHashCode()
}

查看更多