在运行评估前pression [英] Evaluating Expression at Runtime
问题描述
我有一个C#控制台应用程序项目。
I have a C# Console Application project.
我有,存储在数据库中作为nvarchar的一个逻辑的前pression
I have a logical expression that is stored in database as nvarchar.
例如,所存储的前pression是:((34> 0)||(美国== ES))及&安培; (4312 = 5691)
For example, the stored expression is: ((34 > 0) || (US == ES)) && (4312 = 5691)
运行我的应用程序,同时,我想找回前pression和评价它,这样的结果将是真的还是假的。
While my application running, I want to retrieve the expression and evaluate it so that the result will be true or false.
如何能做到在运行时?
推荐答案
下面是一个相当不寻常的解决方案,涉及的JScript:
Here's a rather unusual solution, involving JScript:
-
创建具有以下code一个JScript类:
Create a JScript class with the following code:
public class JsMath {
public static function Eval(expression:String) : Object {
return eval(expression);
}
}
编译成一个DLL:
Compile it into a DLL:
jsc /target:library /out:JsMath.dll JsMath.js
在C#项目,参考JsMath.dll和Microsoft.JScript.dll
In your C# project, reference JsMath.dll and Microsoft.JScript.dll
现在您可以使用评估
的方法如下:
Now you can use the Eval
method as follows:
string expression = "((34 > 0) || ('US' == 'ES')) && (4312 == 5691)";
bool result = (bool)JsMath.Eval(expression);
好处:
- 没有解析EX pression所需的工作,JScript引擎会为你
- 无需编译任意code(这可能是一个很大的安全漏洞,如果code由用户输入)
- 应该与任何简单的数学或逻辑EX pression工作,只要它遵循的JScript语法
缺点:
- 在没有办法传递变量(据我所知)
- 需要参考的JScript组件(不是在大多数情况下,一个大问题,但我不知道该组件可以在客户端配置文件或在Silverlight)
这篇关于在运行评估前pression的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!