2016-03-22 83 views
1

我想在使用C#.Net的Windows窗體中創建一個文本框,這將能夠處理簡單的計算。例如,如果用戶在文本框=5*7中寫入,那麼當文本框得到驗證時textbox.Text = 35包含計算公式的文本框

我的問題是如何將字符串"=5*7"轉換爲doubles和符號以便進行計算。

+2

看看這個[SO問題](HTTP ://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net)。 –

+0

@ AlessandroD'Andria這就是我一直在尋找的! – Charitini

+0

這可能是重複的,但是該帖子的答案並不建議CSharp.Scripting,即imo,它們都是優秀的解決方案。 – Crowcoder

回答

0

您可以使用CodeAnalysis.CSharp.Scripting庫進行此操作。這是available from Nuget

using Microsoft.CodeAnalysis.CSharp.Scripting; 
using System; 

namespace ExpressionParser 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //Demonstrate evaluating C# code 
      var result = CSharpScript.EvaluateAsync("System.DateTime.Now.AddDays(-1) > System.DateTime.Now").Result; 
      Console.WriteLine(result.ToString()); 

      //Demonstrate evaluating simple expressions 
      var result2 = CSharpScript.EvaluateAsync(" 5 * 7").Result; 
      Console.WriteLine(result2); 
      Console.ReadKey(); 
     } 
    } 
} 

的NuGet包:

<包ID = 「Microsoft.CodeAnalysis.Analyzers」 版本= 「1.1.0」 targetFramework = 「net461」/ > <包ID =「微軟。 CodeAnalysis.Common 「版本= 」1.1.1「 targetFramework = 」net461「/ > <包ID = 」Microsoft.CodeAnalysis.CSharp「 版本= 」1.1.1「 targetFramework = 」net461「/ > <包ID =」 Microsoft.CodeAnalysis.CSharp.Scripting「ver錫永= 「1.1.1」 targetFramework = 「net461」/ > <包ID = 「Microsoft.CodeAnalysis.Scripting」 版本= 「1.1.1」 targetFramework = 「net461」/ > <包ID =「Microsoft.CodeAnalysis。 Scripting.Common」版本= 「1.1.1」 targetFramework = 「net461」/ >

+0

我試過包括nuget軟件包'Microsoft.CodeAnalysis.CSharp.Scripting 1.1.1',但它不包含命名空間'Microsoft.CodeAnalysis.CSharp.Scripting' - 所以這個例子不會在我的機器上編譯。看起來,'CSharpScript'不存在。請問你能點亮一下嗎? – Matt

+0

@Matt請參閱編輯Nuget包 – Crowcoder

+0

您是對的,謝謝,我將該包添加到一個空白控制檯項目並插入了您的代碼。關鍵是在添加nuget包之前將框架版本更改爲4.6.1 - 在我的情況下,框架的默認設置是4.5.2,這不起作用(它試圖導入某些內容但失敗)。改變之後,它立即奏效。 – Matt

2

使用CodeAnalysis.CSharp.Scripting庫這裏如何使用它wiki