如何计算表达式
本文关键字:表达式 计算 何计算 | 更新日期: 2023-09-27 18:21:16
考虑这个代码片段;
int sum = 0;
sum = Expression.Evaluate("1+1");
其中sum的值=2
我确实有一个计算值的表达式,但我希望该表达式是用程序构建的,然后计算结果。我不知道我将处理什么类或命名空间。任何人都可以帮助我。
您可以使用表达式树:
表达式树表示树状数据结构中的代码,其中每个节点都是一个表达式,例如,一个方法调用或一个二进制诸如x<y.
您可以编译和运行由表达式树表示的代码。
-
表达式树(C#和Visual Basic)
-
表达式树基础
注意:这个问题可以使用System.Reflection.Emit
解决,并直接与MSIL一起工作,但生成的代码很难编写和读取。
浏览一番后,我建议您在Codeplex上结账:快速轻量级表达式计算器:
Flee是.NET框架的表达式解析器和计算器它允许您计算字符串表达式的值,例如sqrt(a^2+b^2)在运行时。它使用自定义编译器、强类型表达式语言和轻量级代码生成来编译表达式直接到IL。这意味着表达式评估是极其重要的快速高效。
您可以使用lambdas或使用System.Linq.Expressions命名空间中的类以编程方式构建表达式树。
有关详细信息,请参阅MSDN。
你看到了吗http://ncalc.codeplex.com?
它具有可扩展性和快速性(例如,有自己的缓存),使您能够通过处理EvaluateFunction/EEvaluateParameter事件在运行时提供自定义函数和可变值。它可以解析的示例表达式:
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&许多数据类型都是原生的。如果你想更改语法,它会附带一个鹿角文件。还有一个fork支持MEF加载新功能。
它还支持逻辑运算符、日期/时间字符串和if语句。