Как сортировать System.Collections.Generic.List в VB.Net?
Я использую список genric (m_equipmentList), который представляет собой коллекцию объектов (Schedule_Payitem).
Как сортировать список в соответствии с защитой дочернего объекта?
Dim m_equipmentList As New List(Of Schedule_Payitem)
Нужно сортировать m_equipmentList на основе свойства resourceid Schedule_Payitem.
Ответы
Ответ 1
Используете ли вы VB9? Если это так, я бы использовал выражение лямбда для создания Comparer(Of Schedule_PayItem)
. В противном случае напишите короткий класс для реализации IComparer(Of Schedule_PayItem)
. передайте тот, который у вас есть в List.Sort.
Пример выражения лямбда (непроверенный):
m_equipmentList.Sort(Function(p1, p2) p1.ResourceID.CompareTo(p2.ResourceID))
И для IComparer(Of Schedule_PayItem)
:
Public Class PayItemResourceComparer
Implements IComparer(Of Schedule_PayItem)
Public Function Compare(ByVal p1 As Schedule_PayItem, _
ByVal p2 As Schedule_PayItem) As Integer
Return p1.ResourceID.CompareTo(p2.ResourceID)
End Function
End Class
...
m_equipmentList.Sort(New PayItemResourceComparer)
Ответ 2
Я не знаю vb.net, поэтому я сделал это в С#
m_equipmentList.Sort(
(payItem1,payItem2)=>payItem1.ResourceID.CompareTo(payItem2.ResourceID));
и используя рефлектор, перевел его на vb.net, надеюсь, что он поможет
m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem)
Return payItem1.ResourceID.CompareTo(payItem2.ResourceID)
End Function)
или вы можете наследовать Schedule_Payitem из IComparable и реализовать CompareTo, а затем просто вызвать m_equipmentList.Sort()
Ответ 3
Вы можете выполнить сортировку списка в порядке убывания, изменив это -
m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem)
Return payItem1.ResourceID.CompareTo(payItem2.ResourceID)
End Function)
к этому
m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem)
Return payItem2.ResourceID.CompareTo(payItem1.ResourceID)
End Function)
Ответ 4
Попробуйте это
Dim m_equipmentList As New List(Of Schedule_Payitem)
m_equipmentList.Sort(delegate(Schedule_Payitem p1, Schedule_Payitem p2)
{
return p1.resourceid .CompareTo(p2.resourceid );
});