A more generic solution is make a generic helper class, and initialize them with the reference value.
Because, if you need a integer list, and in another hand a double list, you must implement two classes, but, with this approach you use only one.
Module Question1747687
Class OperatorHelper(Of refType)
Public ReferenceValue As refType
Sub New(ByVal value As refType)
ReferenceValue = value
End Sub
Public Function Equal(ByVal comp As refType) As Boolean
Return ReferenceValue.Equals(comp)
End Function
Public Function NotEqual(ByVal comp As refType) As Boolean
Return Not ReferenceValue.Equals(comp)
End Function
Public Function GreaterThan(ByVal comp As refType) As Boolean
Return Compare(comp, ReferenceValue) > 0
End Function
Public Function GreaterThanEqualTo(ByVal comp As refType) As Boolean
Return Compare(comp, ReferenceValue) >= 0
End Function
Public Function LessThan(ByVal comp As refType) As Boolean
Return Compare(comp, ReferenceValue) < 0
End Function
Public Function LessThanEqualTo(ByVal comp As refType) As Boolean
Return Compare(comp, ReferenceValue) <= 0
End Function
Private Function Compare(ByVal l As refType, ByVal r As refType) As Integer
Return CType(l, IComparable).CompareTo(CType(r, IComparable))
End Function
End Class
Sub Main()
Dim source As New List(Of Integer)
Dim helper As OperatorHelper(Of Integer)
source.Add(1)
source.Add(2)
source.Add(3)
source.Add(4)
helper = New OperatorHelper(Of Integer)(2)
Dim newlist As List(Of Integer) = source.FindAll(AddressOf helper.LessThanEqualTo)
For Each i As Integer In newlist
Console.WriteLine(i.ToString)
Next
Console.ReadLine()
End Sub
End Module
With this code, you create the helper and you could encapsulate the comparison logic.