Several varieties on the <Of T> list
5 answers
Yes it is possible. I think the best way, if you can change the People class, is to create your own CompareTo() function.
Private Function CompareTo(p2 As People) As Integer Dim i As Int32 = Me.LName.CompareTo(p2.LName) If i = 0 Then Return Me.FName.CompareTo(p2.FName) End If Return i End Function then use it:
lstPeople.Sort(Function(p1, p2) p1.CompareTo(p2)) EDIT: convert to VB.NET.
+1
Try
Public Class PeopleComparer Implements IComparer(Of People) Public Function Compare(x As People, y As People) As Integer Dim lnameComparison As Integer = x.LName.CompareTo(y.LName) Return If(lnameComparison = 0, x.FName.CompareTo(y.FName), lnameComparison) End Function End Class and
lstPeople.Sort(New PeopleComparer()) 0
Implements System.Collections.Generic.IComparer(Of People).Compare must be added to the function. A piece is generated by entering an enter key after IComparer(Of People)
Public Class PeopleComparer Implements IComparer(Of People) Public Function Compare(x As People, y As People) As Integer Implements System.Collections.Generic.IComparer(Of People).Compare Dim lnameComparison As Integer = x.LName.CompareTo(y.LName) Return If(lnameComparison = 0, x.FName.CompareTo(y.FName), lnameComparison) End Function End Class 0
Bala R's answer is mostly correct, but I had to give the compiler a bit more information to get past the compiler error you saw:
Public Class PeopleComparer Implements IComparer(Of People) Public Function Compare(x As People, y As People) As Integer Implements IComparer(Of People).Compare Dim lnameComparison As Integer = x.LName.CompareTo(y.LName) Return If(lnameComparison = 0, x.FName.CompareTo(y.FName), lnameComparison) End Function End Class and
lstPeople.Sort(New PeopleComparer()) 0