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

Yan*_*hof -1 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();
}
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 7

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

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

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

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

public override int GetHashCode ()
{
    return Name.GetHashCode () ^ Age.GetHashCode ();
}
Run Code Online (Sandbox Code Playgroud)

  • @Yanshof您应该阅读有关哈希码的文档. (3认同)