[英]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.