2014-03-06 153 views
2

我正在爲一個類做一個非常簡單的項目,只是想知道我是否以正確的方式去解決這個問題。我們正在製作Windows計算器的克隆。將一個數學運算符賦值給一個變量 - VB

對於每個數學運算符我的代碼如下:

Private Sub btnPlus_Click(sender As Object, e As EventArgs) Handles btnPlus.Click 
    If opPressed = True Then 
     Select Case (opType) 
      Case "+" 
       txtField.Text = CStr(CDbl(opStore) + CDbl(txtField.Text)) 
      Case "-" 
       txtField.Text = CStr(CDbl(opStore) - CDbl(txtField.Text)) 
      Case "*" 
       txtField.Text = CStr(CDbl(opStore) * CDbl(txtField.Text)) 
      Case "/" 
       txtField.Text = CStr(CDbl(opStore)/CDbl(txtField.Text)) 
     End Select 
     opPressed = True 
     opType = "+" 
    Else 
     opStore = txtField.Text 
     txtField.Clear() 
     opPressed = True 
     opType = "+" 
    End If 
End Sub 

有沒有一種方法,我可以簡單地存儲在一個變量的操作員,然後有一個線:txtField.Text = CStr(CDbl(opStore) variableHere CDbl(txtField.Text))?我已經存儲了使用哪個運算符,那麼是否有任何簡單的方法可以將其轉換爲字符串,並將其用作運算符?

+0

你已經開始正確的做法了。有可能做你在問什麼,但這不是「容易的」。 – EkoostikMartin

+0

好的,謝謝。 你能指出我對另一種方法的正確方向嗎?我很想檢查一下,即使這不是實施的理想情況。 – PatPut

回答

2

如果你想要不同的東西,你可以有Dictionary(Of String, Func(Of Double, Double, Double))類型的成員變量爲一個字符串運營商與運營商的實際邏輯關聯:

Private _ops = New Dictionary(Of String, Func(Of Double, Double, Double))() From { 
    {"+", Function(x, y) x + y}, 
    {"-", Function(x, y) x - y}, 
    {"*", Function(x, y) x * y}, 
    {"/", Function(x, y) x/y} 
} 

,然後用它在你的按鈕單擊處理程序:

Dim op = _ops(opType) 
txtField.Text = CStr(op(CDbl(opStore), CDbl(txtField.Text)) 
+0

比我一直在做的更優雅!謝謝! – PatPut

0

您可以使用NCalc此 - http://ncalc.codeplex.com/

string fullExpression; 
string opType = "+"; 

fullExpression = opStore + opType + txtField.Text; 
Expression e = new Expression(fullExpression); 

txtField.Text = e.Evaluate().ToString(); 
+0

謝謝!由於我需要提交這個課程,所以我正在拍攝,以避免外部圖書館,但我可能不得不在我的空閒時間內使用NCalc - 看起來很酷! – PatPut

相關問題