在运行时评估表达式

Ahm*_*tun 4 .net c# evaluation parsing

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

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

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

在我的应用程序运行时,我想检索表达式并对其进行评估,以便结果为true或false.

我怎么能在运行时这样做?

Tho*_*que 7

这是一个非常不寻常的解决方案,涉及JScript:

优点:

  • 解析表达式无需任何工作,JScript引擎为您完成
  • 无需编译任意代码(如果用户输入代码,则可能是一个很大的安全漏洞)
  • 应该使用任何简单的数学或逻辑表达式,只要它遵循JScript语法

缺点:

  • 没办法传递变量(据我所知)
  • 需要引用JScript程序集(在大多数情况下不是一个大问题,但我不确定此程序集在Client Profile或Silverlight中是否可用)

  • “很容易在输入字符串中检测到它”我对此感觉不太好。在大多数动态类型语言中,很容易绕过这样的黑名单,例如使用 eval。诀窍是以不作为字符串文字出现的形式创建邪恶字符串,然后使用某些语言功能访问具有该名称的变量/类/...。 (2认同)