gpt4 book ai didi

c# - 在运行时评估表达式

转载 作者:太空狗 更新时间:2023-10-30 00:21:36 24 4
gpt4 key购买 nike

我有一个 C# 控制台应用程序项目。

我有一个逻辑表达式作为 nvarchar 存储在数据库中。

例如存储的表达式为:((34 > 0) || (US == ES)) && (4312 = 5691)

当我的应用程序运行时,我想检索表达式并对其求值,以便结果为真或假。

我怎样才能在运行时做到这一点?

最佳答案

这是一个相当不寻常的解决方案,涉及 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 中是否可用)

关于c# - 在运行时评估表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4597767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com