繁体   English   中英

对对象评估用户输入的比较字符串的最佳方法是什么?

[英]What is the best way to evaluate user inputed comparison string against a object?

如果我有用户,请输入一个字符串,例如

eval= "productId = '100' and (GUID = '100' or (GUID = '200' and productId = '100' ) )"

使用字符串查看内存中的对象是否满足这些约束的最佳方法是什么? 例如,以下模型将评估为true:

evaluate(eval, new Product{productId ='100', GUID='100'})

有人将我推向可以实现此目标的设计模式的方向吗?

使用NCalc和反射,可以将Evaluate方法编写为:

public object Evaluate(string exprString, object o)
{
    var dict = o.GetType().GetProperties().ToDictionary(p => p.Name, p => p);

    var expr = new NCalc.Expression(exprString);
    expr.EvaluateParameter += (name, e) =>
    {
        e.Result = dict[name].GetValue(o, null);
    };

    return expr.Evaluate();

}

var res = Evaluate(
             "productId = '100' and (GUID = '100' or (GUID = '200' and productId = '100' ) )", 
             new { productId = "100", GUID = "100" });

要么

var res2 = Evaluate("x + 100 + y", new { x = 10, y = 1 });

PS:为简单起见,将忽略给定对象的错误检查和“公共字段”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM