Reputation: 59
Have any function to use string example ">=" to if s1>=s2.Now I create function may have a short code.
Function Compare(s1 As String, s2 As String, Op As String)
If Op = ">=" Then
Return s1 >= s2
ElseIf Op = ">" Then
Return s1 > s2
ElseIf Op = "=" Then
Return s1 = s2
ElseIf Op = "<" Then
Return s1 < s2
ElseIf Op = "=<" Then
Return s1 < s2
Else
Return False
End If
End Function
Upvotes: 0
Views: 107
Reputation: 15081
I shortened the Function a bit and optimized with OrElse (short-circuits).
Function Compare(s1 As String, s2 As String, Op As String) As Boolean
If s1 = s2 AndAlso (Op = "=" OrElse Op = "<=" OrElse Op = ">=") Then Return True
If s1 > s2 AndAlso (Op = ">=" OrElse Op = ">") Then Return True
If s1 < s2 AndAlso (Op = "<=" OrElse Op = "<") Then Return True
Return False
End Function
Test with
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim a = TextBox1.Text
Dim b = TextBox2.Text
Dim Comparer = TextBox3.Text
Dim bol = Compare(a, b, Comparer)
Dim TF = If(bol, "is", "is not")
MessageBox.Show($"{a} {TF} {Comparer} {b}")
End Sub
There are other ways with extension methods and delegates and such. Google "pass an operator as an argument in .net"
Upvotes: 0
Reputation: 3642
A bit tuned it could look like this:
Function Compare(s1 As String, s2 As String, op As String, caseSensitive As Boolean) As Boolean
Dim myComparer As StringComparer = If(caseSensitive, StringComparer.InvariantCulture, StringComparer.InvariantCultureIgnoreCase)
Select Case op
Case "=", "=="
Return myComparer.Equals(s1, s2)
Case "<>", "!="
Return Not myComparer.Equals(s1, s2)
Case "<"
Return myComparer.Compare(s1, s2) < 0
Case "<=", "=<", "!>"
Return myComparer.Compare(s1, s2) <= 0
Case ">"
Return myComparer.Compare(s1, s2) > 0
Case ">=", "=>", "!<"
Return myComparer.Compare(s1, s2) >= 0
End Select
Return False
End Function
Upvotes: 1