我有一个 C# 控制台应用程序项目。
我有一个逻辑表达式作为 nvarchar 存储在数据库中。
例如,存储的表达式为: ((34 > 0) || (US == ES)) && (4312 = 5691)
当我的应用程序运行时,我想检索表达式并对其进行评估,以便结果为 true 或 false。
我怎样才能在运行时做到这一点?
这是一个相当不寻常的解决方案,涉及 JScript:
-
使用以下代码创建 JScript 类:
public class JsMath {
public static function Eval(expression:String) : Object {
return eval(expression);
}
}
-
将其编译成DLL:
jsc /target:library /out:JsMath.dll JsMath.js
在您的 C# 项目中,引用 JsMath.dll 和 Microsoft.JScript.dll
-
现在您可以使用Eval
方法如下:
string expression = "((34 > 0) || ('US' == 'ES')) && (4312 == 5691)";
bool result = (bool)JsMath.Eval(expression);
好处:
- 解析表达式不需要任何工作,JScript 引擎会为您完成此工作
- 无需编译任意代码(如果用户输入代码,这可能是一个很大的安全漏洞)
- 应该适用于任何简单的数学或逻辑表达式,只要它遵循 JScript 语法
缺点:
- 无法传递变量(据我所知)
- 需要引用 JScript 程序集(在大多数情况下不是一个大问题,但我不确定该程序集在客户端配置文件或 Silverlight 中是否可用)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)