我想在使用C#.Net的Windows窗體中創建一個文本框,這將能夠處理簡單的計算。例如,如果用戶在文本框=5*7
中寫入,那麼當文本框得到驗證時textbox.Text = 35
。包含計算公式的文本框
我的問題是如何將字符串"=5*7"
轉換爲doubles
和符號以便進行計算。
我想在使用C#.Net的Windows窗體中創建一個文本框,這將能夠處理簡單的計算。例如,如果用戶在文本框=5*7
中寫入,那麼當文本框得到驗證時textbox.Text = 35
。包含計算公式的文本框
我的問題是如何將字符串"=5*7"
轉換爲doubles
和符號以便進行計算。
您可以使用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」/ >
我試過包括nuget軟件包'Microsoft.CodeAnalysis.CSharp.Scripting 1.1.1',但它不包含命名空間'Microsoft.CodeAnalysis.CSharp.Scripting' - 所以這個例子不會在我的機器上編譯。看起來,'CSharpScript'不存在。請問你能點亮一下嗎? – Matt
@Matt請參閱編輯Nuget包 – Crowcoder
您是對的,謝謝,我將該包添加到一個空白控制檯項目並插入了您的代碼。關鍵是在添加nuget包之前將框架版本更改爲4.6.1 - 在我的情況下,框架的默認設置是4.5.2,這不起作用(它試圖導入某些內容但失敗)。改變之後,它立即奏效。 – Matt
使用CodeAnalysis.CSharp.Scripting庫這裏如何使用它wiki
看看這個[SO問題](HTTP ://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net)。 –
@ AlessandroD'Andria這就是我一直在尋找的! – Charitini
這可能是重複的,但是該帖子的答案並不建議CSharp.Scripting,即imo,它們都是優秀的解決方案。 – Crowcoder