Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpEqIe 100 of 509 menu
◀ ▶

Интерфейс IEquatable в C#

Интерфейс IEquatable<T> задаёт типобезопасное сравнение без упаковки. Упаковка - это обёртка значения struct в object. Типизированный Equals сравнивает поле напрямую и эту обёртку не делает. Его реализуют вместе с согласованным GetHashCode, иначе объекты нельзя корректно использовать в хеш-таблицах.

Для идентификатора пользователя достаточно одного поля и явного Equals по этому полю. Значение true подтверждает равенство по полю Id. Перегрузка Equals(object?) нужна, когда коллекция передаёт значение как object. Хеш берут из того же поля:

var a = new UserId(7); var b = new UserId(7); Console.WriteLine(a.Equals(b)); readonly struct UserId : IEquatable<UserId> { public int Id { get; } public UserId(int id) => Id = id; public bool Equals(UserId other) => Id == other.Id; public override bool Equals(object? obj) => obj is UserId u && Equals(u); public override int GetHashCode() => Id; }

Опишите тип кода товара из двух букв. Сравните два одинаковых кода и выведите результат в консоль.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить