Dome
Dome

Reputation: 59

May I have to use variable comparison operator in if?

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

Answers (2)

Mary
Mary

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

Christoph
Christoph

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

Related Questions