Я использую общий список (m_equipmentList), который представляет собой набор объектов (Schedule_Payitem) .
Как отсортировать список по принадлежности дочернего объекта?
Dim m_equipmentList As New List(Of Schedule_Payitem)
Необходимо отсортировать m_equipmentList на основе свойства resourceid Schedule_Payitem.





Попробуй это
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 );
});
VB.Net не имеет поддержки анонимных делегатов до vs2008, поэтому преобразование из этого кода может быть нетривиальным.
Ваш код представляет собой смесь C# и VB.Net! ';' символ в конце строки предназначен для C#!
Я не знаю vb.net, поэтому сделал это на C#
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()
Это отличный способ решить множество проблем: D
Вы используете 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)
Полезный совет по указанию Collections.Generic.IComparer (Of Schedule_PayItem). Я получал сообщение об ошибке: «System.Collections.IComparer» не имеет параметров типа. Небольшой поиск помог мне обнаружить, что существуют два таких интерфейса с одинаковыми именами: один в System.Collections, а другой в System.Collections.Generic.
Вы можете выполнить сортировку списка в порядке убывания, изменив это -
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)
Спасибо, что спросили об этом. Я смог использовать лямбда-выражение Джона Скита в одном из моих проектов.