将字符串转换为运算符

时间:2013-11-25 22:18:32

标签: wpf vb.net operator-keyword type-conversion

在我的VB.Net 4.5 WPF应用程序中,我有3个文本框供用户输入以下内容:

  1. txtFirstNumber
  2. txtOperator
  3. txtSecondNumber
  4. 问题:我发现我无法将运算符字符串转换为实际的数学运算符,因为运算符没有数据类型。

    我不能使用+或&或val或eval来计算:txtFirstNumber txtOperator txtSecondNumber

    例如:如果用户输入12作为firstNumber,+作为operator,输入5作为secondNumber,那么我想自动计算12 + 5并将答案放在名为CalculateAnswer的标签中。

    如果用户输入不同的内容,我仍然希望进行计算。即使他们输入双数作为其中一个数字。

    所以我需要帮助!这是我的代码:

        Dim CalcAnswer As Double
        Try
            Dim first As Double = CDbl(txtFirstNumber.Text)
            Dim op As String = txtOperator.Text
            Dim second As Double = CDbl(txtSecondNumber.Text)
            CalcAnswer = Eval(first & op & second)
            CalculateAnswer.Content = CStr(CalcAnswer)
        Catch CalcError As Exception
            MsgBox(CalcError.Message)
        End Try
    

    提前致谢!

1 个答案:

答案 0 :(得分:1)

我会这样做:

Try
    Dim first As Decimal = Decimal.Parse(txtFirstNumber.Text)
    Dim second As Decimal = Decimal.Parse(txtSecondNumber.Text)
    CalculateAnswer.Content = Eval(first, second, txtOperator.Text).ToString()
Catch CalcError As Exception
    MsgBox(CalcError.Message)
End Try

'...

Function Add(ByVal a As Decimal, ByVal b As Decimal) As Decimal
   Return a + b
End Function

Function Subtract(ByVal a As Decimal, ByVal b As Decimal) As Decimal
   Return a - b
End Function

Function Multiply(ByVal a As Decimal, ByVal b As Decimal) As Decimal
   Return a * b
End Function

Function Divide(ByVal a As Decimal, ByVal b As Decimal) As Decimal
   Return a / b
End Function

Function Eval(ByVal a As Decimal, ByVal b As Decimal, ByVal Operator As String) As Decimal
   Operator = Operator.Trim()
   Select Operator
      Case "+"
        Return Add(a, b)
      Case "-"
        Return Subtract(a, b)
      Case "*","x"
        Return Multiply(a, b)
      Case "/"
         Return Divide(a, b)
      Case Else 
          Throw New InvalidArgumentException("Did not recognize operator: " & Operator)
   End Select
End Function