IComparable - называть разные виды?

У меня есть DTO, который я использую для обработки транзакций. Чтобы убедиться, что он обрабатывается в правильном порядке, я использую iComparable и сортирую список (из T) DTO. Это прекрасно работает. Однако я только что получил еще одно требование, что клиент хочет, чтобы вывод был в другом порядке... есть ли способ позволить мне иметь два разных вида для одного и того же объекта, или мне нужно скопировать текущий класс, сохранить вывод как новый список этого типа и сортировки с использованием нового способа для этого объекта? Кажется, это ужасный способ сделать это, но я не могу найти ничего, что позволило бы мне это сделать.


person RiddlerDev    schedule 17.08.2010    source источник


Ответы (2)


Вот пример, который я вырвал из недавнего проекта. Работает как шарм. Просто нужно не забыть вызвать SORT с соответствующей функцией. Это выходит за рамки интерфейса IComparable, поэтому вы можете исключить это из объявления вашего класса.

Public Class Purchaser
....
Public Shared Function CompareByGroup( _
   ByVal x As Purchaser, ByVal y As Purchaser) As Integer

   If x Is Nothing Then
     If y Is Nothing Then
       ' If x is Nothing and y is Nothing, they're equal. 
       Return 0
     Else
       ' If x is Nothing and y is not Nothing, y is greater. 
       Return -1
     End If
   Else
     If y Is Nothing Then
       ' If x is not Nothing and y is Nothing, x is greater. 
       Return 1
     Else
       ' ...and y is not Nothing, compare by GroupName.
       Return x.GroupName.CompareTo(y.GroupName)
     End If
    End If
  End Function

  Public Shared Function CompareByName( _
    ByVal x As Purchaser, ByVal y As Purchaser) As Integer

    ... 'you get the idea
  End Function

И называть их так...

tempList.Sort(AddressOf Classes.Purchaser.CompareByGroup)

or

tempList.Sort(AddressOf Classes.Purchaser.CompareByName)
person Bill    schedule 17.08.2010
comment
Отлично, спасибо, у меня были мои процедуры сравнения, но я не мог на всю жизнь получить правильный синтаксис для сортировки. - person RiddlerDev; 18.08.2010

Или вы можете использовать linq, если вы используете .Net 3.5 или выше.

dim orderedlistofdtos = (from e in listofdtos order by e.whatever select e).Tolist
person chrissie1    schedule 17.08.2010