Це мій код. Чому хеш-код моїх двох об’єктів не однаковий?
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();
}
Відповіді:
7 для відповіді № 1Оскільки ви не переосмислюєте GetHashCode
, ви будете використовувати System.Object версія за спадщиною.
Метод GetHashCode може бути замінений похідним типом. Якщо GetHashCode не перекрито, хеш-коди для посилальних типів обчислюються за допомогою виклику методу Object.GetHashCode базового класу, який обчислює хеш-код на основі посилання на об'єкт
Іншими словами, оскільки вони "не однакові об'єкт об'єкта, вони не будуть мати однаковий хеш-код.
Щоб вони мали однаковий хеш-код, вам доведеться реалізувати свій власний GetHashCode, замінивши його в класі Person, наприклад, простий;
public override int GetHashCode ()
{
return Name.GetHashCode () ^ Age.GetHashCode ();
}
2 для відповіді № 2
Тому що вони не є одним і тим же об'єктом, вони просто зберігають однакові дані.