2009-01-13 43 views
30

I usando una lista genérica (m_equipmentList) que es colección de objetos (Schedule_Payitem).
¿Cómo se puede ordenar la lista de acuerdo con un objeto de prohood of child?¿Cómo ordenar un System.Collections.Generic.List en VB.Net?

Dim m_equipmentList As New List(Of Schedule_Payitem) 

necesidad de clasificar m_equipmentList en base a la propiedad de resourceid Schedule_Payitem.

+0

Gracias por preguntar esto. Pude usar la expresión lambda de Jon Skeet en uno de mis proyectos. – tooleb

Respuesta

56

¿Estás utilizando VB9? Si es así, usaría un lambda expression para crear un Comparer(Of Schedule_PayItem). De lo contrario, escriba una clase corta para implementar IComparer(Of Schedule_PayItem). pase cualquiera que tenga en List.Sort.

Un ejemplo para la expresión lambda (no probado):

m_equipmentList.Sort(Function(p1, p2) p1.ResourceID.CompareTo(p2.ResourceID)) 

Y para el 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) 
+4

Consejo útil para especificar Collections.Generic.IComparer (Of Schedule_PayItem). Me estaba dando un error: 'System.Collections.IComparer' no tiene parámetros de tipo. Una pequeña búsqueda me ayudó a encontrar que existen dos interfaces con el mismo nombre, una en System.Collections y otra en System.Collections.Generic. –

1

probar este

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); 
       }); 
+1

VB.Net no tiene soporte delegado anónimo hasta vs2008, por lo que la conversión de este código puede no ser trivial. –

7

No sé vb.net así que lo hice en C#

m_equipmentList.Sort(
    (payItem1,payItem2)=>payItem1.ResourceID.CompareTo(payItem2.ResourceID)); 

y usar el reflector traduje a vb.net creo que sirve

m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem1.ResourceID.CompareTo(payItem2.ResourceID) 
End Function) 

o puede heredar Schedule_Payitem de IComparable e implementar CompareTo y luego simplemente llamar a m_equipmentList.Sort()

+0

Esta es una gran manera para muchos problemas: D – CodingBarfield

5

que puede lograr la clasificación de la lista en orden descendente cambiando esto-

m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem1.ResourceID.CompareTo(payItem2.ResourceID) 
End Function) 

a este

m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem2.ResourceID.CompareTo(payItem1.ResourceID) 
End Function) 
Cuestiones relacionadas