在运行评估前pression [英] Evaluating Expression at Runtime

查看:109
本文介绍了在运行评估前pression的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆