here's an example:
vb.net Code:
Public Class Class1
Public a As Integer
Public b As Decimal
Public c As String
End Class
vb.net Code:
Public Class comparer
Implements IComparer(Of Class1)
Private _field As String
Public Property field() As String
Get
Return _field
End Get
Set(ByVal value As String)
_field = value
End Set
End Property
Public Enum order
ascending
descending
End Enum
Private _order As order
Public Property sortOrder() As order
Get
Return _order
End Get
Set(ByVal value As order)
_order = value
End Set
End Property
Public Sub New(ByVal field As String, ByVal sortOrder As order)
Me.field = field
Me.sortOrder = sortOrder
End Sub
Public Function Compare(ByVal x As Class1, ByVal y As Class1) As Integer Implements System.Collections.Generic.IComparer(Of Class1).Compare
If field = "a" Then
If Me.sortOrder = order.ascending Then
Return CInt(x.a).CompareTo(CInt(y.a))
ElseIf Me.sortOrder = order.descending Then
Return CInt(y.a).CompareTo(CInt(x.a))
End If
ElseIf field = "b" Then
If Me.sortOrder = order.ascending Then
Return CDec(x.b).CompareTo(CDec(y.b))
ElseIf Me.sortOrder = order.descending Then
Return CDec(y.b).CompareTo(CDec(x.b))
End If
ElseIf field = "c" Then
If Me.sortOrder = order.ascending Then
Return x.c.CompareTo(y.c)
ElseIf Me.sortOrder = order.descending Then
Return y.c.CompareTo(x.c)
End If
End If
End Function
End Class
vb.net Code:
Public Class Form1
Private myList As New List(Of Class1)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myList.Add(New Class1 With {.a = 5, .b = 1.5D, .c = "c"})
myList.Add(New Class1 With {.a = 3, .b = 0.75D, .c = "a"})
myList.Add(New Class1 With {.a = 7, .b = 2.25D, .c = "b"})
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'to sort a generic list with an icomparer
myList.Sort(New comparer("c", comparer.order.ascending))
'you can use LINQ with min + max
MsgBox(myList.Min(Function(c1) c1.a))
MsgBox(myList.Max(Function(c1) c1.c))
End Sub
End Class