我正在使用C#中的应用程序,我想在其中计算以字符串形式给出的算术表达式.就像我有一个字符串:
string myExpr="4*(80+(5/2))+2";
Run Code Online (Sandbox Code Playgroud)
我想计算算术表达式的结果.在使用Javascript,PHP等语言时,你可以使用Eval来做这个技巧,这似乎不是C#中的一个选项.
我想可以编写一个代码将它分成无数简单的表达式,计算它们并将它们加在一起,但这需要相当长的时间,而且我可能会遇到很多麻烦.
所以...我的问题,有没有"简单"的方法来做到这一点?
你可以参考一个javascript库,然后做一些像:
var engine = VsaEngine.CreateEngine();
Eval.JScriptEvaluate(mySum, engine);
Run Code Online (Sandbox Code Playgroud)
编辑; 库是Microsoft.JScript
你见过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语句.