2009-01-13 16 views
30

Ich benutze eine genrische Liste (m_equipmentList), die Sammlung von Objekten (Schedule_Payitem) ist.
Wie kann die Sortierung nach einem Kindheitsobjekt sortiert werden?Wie sortiere ich eine System.Collections.Generic.List in VB.Net?

Dim m_equipmentList As New List(Of Schedule_Payitem) 

Need m_equipmentList auf Basis von ResourceID Eigenschaft Schedule_Payitem zu sortieren.

+0

Danke für die Nachfrage. Ich konnte den Lambda-Ausdruck von Jon Skeet in einem meiner Projekte verwenden. – tooleb

Antwort

56

Verwenden Sie VB9? Wenn ja, würde ich eine lambda expression verwenden, um eine Comparer(Of Schedule_PayItem) zu erstellen. Schreiben Sie andernfalls eine kurze Klasse, um IComparer(Of Schedule_PayItem) zu implementieren. Übergeben Sie das, was Sie in List.Sort haben.

Ein Beispiel für den Lambda-Ausdruck (ungetestet):

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

Und für die 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

Hilfreich Tipp zum Angeben von Collections.Generic.IComparer (Of Schedule_PayItem). Ich habe einen Fehler erhalten: 'System.Collections.IComparer' hat keine Typparameter. Eine kleine Suche half mir zu finden, dass zwei solche Schnittstellen mit demselben Namen existieren, eine in System.Collections und eine andere in System.Collections.Generic. –

1

Versuchen Sie, diese

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 hat keine anonyme Delegiertenunterstützung bis vs2008, daher ist die Konvertierung von diesem Code möglicherweise nicht trivial. –

7

Ich weiß nicht, vb.net, damit ich es in C# tat

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

und mit dem Reflektor übersetzt es zu vb.net hoffen, dass es

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

oder Sie erben Schedule_Payitem von IComparable und implementieren CompareTo und rufen Sie dann einfach m_equipmentList.Sort()

+0

Dies ist ein guter Weg für viele Probleme: D – CodingBarfield

5

Sie erreichen können this-

m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem1.ResourceID.CompareTo(payItem2.ResourceID) 
End Function) 
in absteigender Reihenfolge die Liste Sortierung durch Ändern

zu diesem

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