评估存储在字符串中的算术表达式(C#)

我正在使用C#中的应用程序,我想要计算一个以字符串forms给出的算术表达式。 就像我得到一个字符串:

string myExpr="4*(80+(5/2))+2"; 

我想计算算术表达式的结果。 在使用Javascript,PHP等语言时,你可以使用Eval来做这个技巧,这似乎不是C#中的一个选项。

我想可以编写一个代码将它分成无数简单的表达式,计算它们并将它们加在一起,但这需要相当长的时间,而且我可能会遇到很多麻烦。

所以…我的问题,有没有“简单”的方法来做到这一点?

你可以参考一个javascript库,然后做一些像:

 var engine = VsaEngine.CreateEngine(); Eval.JScriptEvaluate(mySum, engine); 

编辑; 库是Microsoft.JScript

您可以调用JScript.NET eval函数。 任何.NET语言都可以调用任何其他语言。

你见过http://ncalc.codeplex.com吗?

它具有可扩展性,快速(例如,具有自己的缓存),使您能够通过处理EvaluateFunction / EvaluateParameter事件在运行时提供自定义函数和变量。 它可以解析的示例表达式:

 Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)"); e.Parameters["Pi2"] = new Expression("Pi * Pi"); e.Parameters["X"] = 10; e.EvaluateParameter += delegate(string name, ParameterArgs args) { if (name == "Pi") args.Result = 3.14; }; Debug.Assert(117.07 == e.Evaluate()); 

它还可以本地处理unicode和许多数据类型。 如果你想改变语法,它会附带一个鹿茸文件。 还有一个支持MEF加载新function的fork。

它还支持逻辑运算符,日期/时间的字符串和if语句。

看到这个答案:

C#数学计算器

我已经使用NCalc取得了巨大的成功。 它非常灵活,允许公式中的变量。 您可以轻松评估您在问题中列出的公式:

 string myExpr = "4*(80+(5/2))+2"; decimal result = Convert.ToDecimal(new Expression(myExpr).Evaluate()); 

您需要实现表达式求值程序。 如果你有背景,这是相当简单的,但它不是“简单”。 解释环境中的Eval实际上在字符串上重新运行语言解析器; 您需要在C#代码中为您关注的位模拟该操作。

搜索“表达式计算器”和“递归下降解析器”以开始。

如果你有Bjarne Stroustrup的C ++编程语言 ,那么在第6章中他将逐步解释(在C ++中)如何完成Chris Tavares所建议的内容。

如果你不熟悉这个程序,它很简单但有点令人兴奋。

我需要为本科项目做类似的事情,我发现了这一点

C#中的反向波兰表示法

教程和代码非常有价值。

它几乎只是将字符串转换为Reverse Polish Notation然后对其进行评估的实现。 它非常易于使用,理解和添加新function。 源代码包含在内。

尝试这样的事情:

 int mySum = 4*(80+(5/2))+2; var myStringSum = mySum.toString();