如果我有一个这样的字符串:
"if (24 == 24) AND ((true == false) OR (true == true)) AND ('HELLO' != 'WORLD')"
如何使用C#/ .Net?
动态评估代码我们有一个动态的“规则引擎”,用户可以在其中定义规则。所以规则可能是
if (@Number == 24) AND ((@SomeVal1 == false) OR (@SomeVal2 == true))
AND ('@CustomerFirstName' != '@CustomerLastName').
我们想对@变量进行简单的搜索/替换,然后评估字符串。
答案 0 :(得分:2)
你可以,但是需要花很多时间来跳过篮球。但是,.net框架有Expression Trees,可用于生成此类表达式并将它们编译为lambda。
答案 1 :(得分:2)
将数据作为代码处理始终会带来一些重大风险,因此请仔细考虑这将对您的应用程序带来哪些安全隐患。
C#通常不是这样的动态语言,但你可以破解这个功能。 Here是eval
的C#版本的示例。
根据需要,表达式树也可以是一个选项,正如@Femaref指出的那样。
答案 2 :(得分:1)
除了Femaref的回答,您还可以尝试自己解释字符串。
这种方式就是某种DSL(特定于域的语言)。您可以在此处阅读有关DSL的更多信息:
ANTLR(构建DSL的有用工具)http://www.antlr.org/wiki/display/ANTLR3/Antlr+3+CSharp+Target
答案 3 :(得分:0)
我担心没有简单的方法可以做到这一点。 您可以手动解析字符串,然后使用Reflection来获取@foo语法所引用的变量或字段或属性,或者您可以使用反映规则的方法创建动态类型。
答案 4 :(得分:0)
我不确定你可能有多复杂的表达方式。但是这里有一个很好的库,我认为可以处理你的示例表达式。 http://ncalc.codeplex.com/