Есть класс c переопределенным методом Equals()
/// <summary>
/// Описание пользователя
/// </summary>
/// <remarks>Объект данного класса также является сущностью базы данных</remarks>
public class User
{
public string Surname { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
if (!(obj is User secondUser))
return false;
return this.Surname.Equals(secondUser.Surname) && this.Name.Equals(secondUser.Name);
}
public override int GetHashCode()
{
//?
}
}
Не знаю как переопределить метод GetHashCode()
согласно моему условию уникальности - достаточно, чтобы совпадало фамилия и имя.
Из всего поиска хочется выделить вот эти две статьи
^
меня вводит просто в ступор. Не понимаю, что это такое. Думал это больше из мира Си
.Хотел сказать, что и эти две статьи не помогли мне.
Вычисление хэшкода должно быть быстрым (быстрее полного сравнения), и не должно плодить мусор.
Варианты типа (Name+Surname).GetHashCode()
Причем это произойдет для обоих сравниваемых объектов. Такое вычисление хэшкода - дороже, чем прямое сравнение объектов.
Судя по комментарию
/// <remarks>Объект данного класса также является сущностью базы данных</remarks>
у вас этот класс будет лежать в базе данных. И у него скорее всего будет поле UserID
. Вот и реализуйте GetHashCode
как
public override int GetHashCode()
{
return this.UserID.GetHashCode();
}
или даже
public override int GetHashCode()
{
return this.UserID;
}
И, соответственно, дописать сравнение по UserID
в Equals
- пользователи с разным UserID
не должны считаться Equal;
Если UserID
нет, то используйте в качестве хэшкода комбинацию хэшкодов неизменяемых полей (только тех, которые используются в Equals
):
public override int GetHashCode()
{
return Name.GetHashCode() * 13 + Surname.GetHashCode();
}
Ну или просто возвращайте хэш какого-то достаточно уникального поля, если нет альтернатив:
public override int GetHashCode()
{
return Surname.GetHashCode();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Создал класс у которого родитель TabPage (проект winforms), как мне отслеживать нажатие клавиш из класса?