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