У меня есть List(Of MyObject)
, который мне нужно отсортировать. Поэтому я убедился, что реализованы IComparable
, IEquatable
, IEqualityComparer
и IComparer
, и сортировка работает отлично.
Появилось новое новое требование для проекта. Сортированный список не может содержать «дубликаты» объектов. Дубликат в этом случае немного отличается от того, как дубликат определяется для целей сортировки. Я создал новую подпрограмму, которая проверит два объекта и вернет предпочтительный. Предпочтительным является тот, у которого все значения одинаковы, кроме одного, и последнее значение является наибольшим. У меня эта рутина работает хорошо.
Теперь я хотел бы решить эту проблему «удаления дубликатов», создав объект, который наследует IList(Of MyObject)
, а затем переопределив метод Sort
, чтобы сначала удалить «дубликаты», а затем отсортировать, используя интерфейс IComparable
как List
обычно сортирует себя. Тем не менее, я понятия не имею, как это сделать. Это даже не кажется возможным из того, что я прочитал до сих пор. Я знаю, что могу решить эту проблему, просто создав отдельную подпрограмму типа SortWithRemove
или что-то в этом роде, но мне было интересно, возможно ли переопределение.
Редактировать: Исходя из приведенных ниже предложений, я решил не переопределять Sort
, а использовать метод расширения. Вот мой код:
Public Module Extensions
<System.Runtime.CompilerServices.Extension()> _
Public Sub SortRemovingDuplicates(list As List(Of UniCatalogEntry))
'filter out unwanted records
End Sub
End Module