2016-03-22 62 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