如何计算表达式
考虑这个代码片段;
int sum = 0;
sum = Expression.Evaluate("1+1");
其中 sum = 2 的值
我确实有一个可以计算值的表达式,但我希望以编程方式构建该表达式,然后评估结果。我不知道我将处理什么类或名称空间。任何人都可以帮助我。
Consider this code fragment;
int sum = 0;
sum = Expression.Evaluate("1+1");
where the value of sum = 2
I do have an expression that will compute values but i want that expression to be build programatically then evaluate the result. I don't have any idea what class or namespace that I will dealing with. Anyone can help me.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用表达式树:
表达式树(C# 和 Visual Basic)
表达式树基础知识
注意:这个问题可以使用
System.Reflection.Emit
来解决,并直接使用MSIL,但生成的代码很难编写和阅读。经过一番浏览后,我建议您在 Codeplex 上查看 Flee:快速轻量级表达式评估器:
You could use Expression Trees:
Expression Trees (C# and Visual Basic)
Expression Tree Basics
Note: This problem can be solved using
System.Reflection.Emit
and work directly with MSIL, but the resulting code is hard to write and read.After a little browsing, I suggest you checkout Flee on Codeplex: Fast Lightweight Expression Evaluator :
您可以使用 lambda 或使用 System.Linq.Expressions 命名空间中的类以编程方式构建表达式树。
有关详细信息,请参阅 MSDN。
You can build Expressions trees either using lambdas or by building them programatically using classes in the System.Linq.Expressions namespace.
See MSDN for more info.
您看过 http://ncalc.codeplex.com 吗?
它是可扩展的、快速的(例如有自己的缓存),使您能够在运行时通过处理 EvaluateFunction/EvaluateParameter 事件来提供自定义函数和变量。它可以解析的示例表达式:
它还处理 unicode &许多本地数据类型。如果您想更改语法,它会附带一个鹿角文件。还有一个支持 MEF 加载新功能的 fork。
它还支持逻辑运算符、日期/时间字符串和 if 语句。
Have you seen http://ncalc.codeplex.com ?
It's extensible, fast (e.g. has its own cache) enables you to provide custom functions and varaibles at run time by handling EvaluateFunction/EvaluateParameter events. Example expressions it can parse:
It also handles unicode & many data type natively. It comes with an antler file if you want to change the grammer. There is also a fork which supports MEF to load new functions.
It also supports logical operators, date/time's strings and if statements.