为什么我会得到两个不同的hashCodes?

时间:2016-01-31 13:31:31

标签: c#

这是我的代码。为什么我的两个对象的哈希码不一样?

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

static void Main(string[] args)
{
    Person p1 = new Person()
    {
        Age = 21,
        Name = "Anna"
    };

    Person p2 = new Person()
    {
        Age = 21,
        Name = "Anna"
    };

    int i = p1.GetHashCode();
    int j = p2.GetHashCode();

    Console.ReadLine();
}

2 个答案:

答案 0 :(得分:7)

由于您未覆盖GetHashCode,因此您将通过继承使用System.Object版本。

  

GetHashCode方法可以被派生类型覆盖。如果未覆盖GetHashCode,则通过调用基类的Object.GetHashCode方法计算引用类型的哈希码,根据对象的引用计算哈希码

换句话说,由于它们不是相同的对象实例,因此它们不会具有相同的哈希码。

要使它们具有相同的哈希码,您必须通过在Person类中重写它来实现自己的GetHashCode,例如simple;

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

答案 1 :(得分:2)

因为它们不是同一个对象,只是持有相同的数据。