Distinct() не работает - C#

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. public class RouteRel : IEquatable<RouteRel>
  2. {
  3. public long Id { get; set; }
  4. public string Ref { get; set; }
  5. public string Name { get; set; }
  6. public string Description { get; set; }
  7. public int GetHashCode( RouteRel obj )
  8. {
  9. return obj.Id.GetHashCode();
  10. }
  11. public bool Equals( RouteRel other )
  12. {
  13. if ( Object.ReferenceEquals( this, other ) )
  14. return true;
  15. if ( Object.ReferenceEquals( other, null ) )
  16. return false;
  17. return EqualsHelper( this, other );
  18. }
  19. protected static bool EqualsHelper( RouteRel r1, RouteRel r2 )
  20. {
  21. return r1.Id == r2.Id || r1.Ref == r2.Ref;
  22. }
  23. }
Листинг программы
  1. List<RouteRel> routes = new List<RouteRel>();
  2. /* здесь инициализация */
  3. routes = routes.Distinct().ToList();
В результате тот же список, дубликаты не удалены. А данный код, для одинаковых объектов, возвращает true:
Листинг программы
  1. routes[ 2 ].Equals( routes[ 3 ] );

Решение задачи: «Distinct() не работает»

textual
Листинг программы
  1. public override bool Equals(object obj)
  2. {
  3.     if (ReferenceEquals(null, obj))
  4.     {
  5.         return false;
  6.     }
  7.     if (ReferenceEquals(this, obj))
  8.     {
  9.         return true;
  10.     }
  11.     if (obj.GetType() != GetType())
  12.     {
  13.         return false;
  14.     }
  15.     return Equals((RouteRel)obj);
  16. }
  17.  
  18. public bool Equals(RouteRel other)
  19. {
  20.     return Id == other.Id || string.Equals(Ref, other.Ref);
  21. }
  22.  
  23. public override int GetHashCode()
  24. {
  25.     unchecked
  26.     {
  27.         return (Id.GetHashCode() * 397) | (Ref != null ? Ref.GetHashCode() : 0);
  28.     }
  29. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут