2016-01-31 2 views
-1

Это мой код. Почему хэш-код двух моих объектов не одинаковый?Почему я получаю два разных хэш-кода?

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(); 
} 
+0

Покажите нам хэш-код и предоставить больше информации – Phiter

+0

просто скопировать вставить код и посмотреть, что есть два различных значения на I и J – Yanshof

ответ

7

Поскольку вы не переопределяете GetHashCode, вы будете использовать версию System.Object по наследству.

Метод GetHashCode может быть переопределен производным типом. Если GetHashCode не переопределяется, хэш-коды для ссылочных типов вычисляются путем вызова метода Object.GetHashCode базового класса, , который вычисляет хэш-код, основанный на ссылке объекта

Другими словами, так как они» re не то же самое экземпляр объекта, у них не будет одинакового хеш-кода.

Чтобы сделать их одинаковыми хэш-код, вам придется реализовать свой собственный GetHashCode, переопределив его в классе Person, например, simple;

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

ОК, так как я могу сделать эти два «тот же объект данных», чтобы удерживать такой же хэш-код без переопределения? – Yanshof

+1

Попробуйте сделать их структурированными или переопределить методы 'GetHashCode'. –

+3

@Yanshof Вы должны, вероятно, прочитать документы вокруг хеш-кодов. – Jeroen

2

Потому что они не одни и те же объекты, просто содержащие одни и те же данные.

Смежные вопросы