JL.*_*JL. 3 c# evaluation runtime
是否可以在运行时在C#中评估以下内容
我有一个包含3类属性(Field,Operator,Value)
rule.Field;
rule.Operator;
rule.Value;
Run Code Online (Sandbox Code Playgroud)
这是我的规则类......
现在我有一个循环
foreach(item in items)
{
// here I want to create a dynamic expression to evaluate at runtime
// something like
if (item.[rule.field] [rule.operator] [rule.value])
{ do work }
}
Run Code Online (Sandbox Code Playgroud)
我只是不知道语法,或者它是否可能在C#中,我在JS中知道它可能但是这不是编译语言.
更新
基本上我想要一种方式eval(stringCode)或更好的支持方式.
不,C#不直接支持这样的事情.
最接近的选项是:
CSharpCodeProvider.免责声明:我是Eval Expression.NET项目的所有者
这个库接近于 JS Eval 的等价物。您几乎可以评估和编译所有 C# 语言。
这是一个使用您的问题的简单示例,但该库远远超出了这个简单的场景。
int field = 2;
int value = 1;
string binaryOperator = ">";
string formula = "x " + binaryOperator + " y";
// For single evaluation
var value1 = Eval.Execute<bool>(formula, new { x = field, y = value });
// For many evaluation
var compiled = Eval.Compile<Func<int, int, bool>>(formula, "x", "y");
var value2 = compiled(field, value);
Run Code Online (Sandbox Code Playgroud)
编辑答案评论:
专有库做简单评估?不,谢谢
该库不仅支持简单的求值,还支持几乎所有的 C# 语言。允许你动态添加一个方法,使用async、linq、loop等,这不仅仅是“做简单的评估”
Jon Skeet 提供的最接近的选项解决方案很棒,但肯定需要几天的开发和测试才能支持所有情况,具体取决于运营商。当然,这个库可以帮助一些开发人员,但在其他一些情况下,比如你的情况,没有它也可以完成。
| 归档时间: |
|
| 查看次数: |
2890 次 |
| 最近记录: |