我想在使用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