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

use*_*er6 5 c#

我正在使用C#中的应用程序,我想在其中计算以字符串形式给出的算术表达式.就像我有一个字符串:

string myExpr="4*(80+(5/2))+2";
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ben*_*igt 5

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


Rob*_*Rob 5

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

var engine = VsaEngine.CreateEngine();
Eval.JScriptEvaluate(mySum, engine);
Run Code Online (Sandbox Code Playgroud)

编辑; 库是Microsoft.JScript


Gre*_*oud 5

你见过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());
Run Code Online (Sandbox Code Playgroud)

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

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