@daniil14056

Что делает IEqualityComparer? Он вообще работает?

Почему он вообще не работает, его методы никогда не вызываются.
Для чего он нужен. Если достаточно переопределить Equals, GetHashCode?

И почему у меня ide для него генерирует другой код, не такой как в документации.
IEqualityComparer.Equals(T? x, T? y) почему не могу написать bool Equals(T? x, T? y), выдает ошибку.
https://learn.microsoft.com/ru-ru/dotnet/api/syste...
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 2
WNeZRoS
@WNeZRoS
IEqualityComparer<T> используется в коде с обобщениями (generics).
Например, он используется для ключей в Dictionary или для сравнения (Equals) элементов в ValueTuple.
Если бы в Dictionary использовали object.Equals, а не IEqualityComparer<T>, то при сравнении ключей-структур постоянно бы происходил боксинг, что не очень эффективно. (У простых структур всё-равно будет боксинг, чтобы его не было надо реализовать IEquatable).

Когда у вас уже известен тип большого смысле использовать IEqualityComparer<T> мало, есть более лаконичные вариант для Equals и GetHashCode.
Ответ написан
vabka
@vabka Куратор тега C#
Токсичный шарпист

Для чего он нужен. Если достаточно переопределить Equals, GetHashCode?

Например, если ты уже пеоеопределил Equals и тебе нужно другое поведение при сравнении.
К примеру есть equality comparer для строк, который игнорирует регистр.

По поводу всего остального - прикладывай свой код
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы