Sorting a user defined collection class

This tip demonstrates how to sort a user-defined collection class. Let us say we have a custom class as ClientCollection (collection of Client object) which Inherits System.Collections.CollectionBase. To sort the collection , order by LAST NAME , we can use the following steps.

First create a class that implements [IComparer] interface and define the [Compare] method.Following is the class that we will use for sorting Clients order by last name.
[VB.NET CODE STARTS]

Public Class ClientComparer
    Implements IComparer
 
    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
        Dim objClientX As Client = CType(x, Client) '  Client is the class having FirtsName, LastName as properties
        Dim objClientY As Client = CType(y, Client)
 
        Dim sX As String = UCase(objClientX.LastName) ' comparision is made using the LAST NAME OF CLIENT
        Dim sY As String = UCase(objClientY.LastName)
 
        If sX = sY Then
            Return 0
        End If
 
        If sX.Length > sY.Length Then
            sX = sX.Substring(0, sY.Length)
            If sX = sY Then
                Return 1
            End If
        ElseIf sX.Length < sY.Length Then
            sY = sY.Substring(0, sX.Length)
            If sX = sY Then
                Return -1
            End If
        End If
 
        For i As Integer = 0 To sX.Length
            If Not sX.Substring(i, 1) = sY.Substring(i, 1) Then
                Return Asc(CType(sX.Substring(i, 1), Char)) - Asc(CType(sY.Substring(i, 1), Char))
            End If
        Next
    End Function
 
End Class

[VB.NET CODE ENDS]

Next create a new method in the collection class as follows.

[VB.NET CODE STARTS]

 Public Sub SortCollection()
 
        InnerList.Sort(New ClientComparer())
       
' Innerlist :Gets an System.Collections.ArrayList containing the list of elements in the System.Collections.CollectionBase instance.
' ClientComparer() : takes 2 client object at a time and sort them using last name
 End Sub

[VB.NET CODE ENDS]

For sorting the client collection we just need to call the SortCollection() method.

150 150 Burnignorance | Where Minds Meet And Sparks Fly!