Есть класс 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();
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости