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

C# 根据对象评估用户输入的比较字符串的最佳方法是什么?,c#,reflection,C#,Reflection,如果我有一个用户,请给出一个字符串,例如 eval=“productId='100'和(GUID='100'或(GUID='200'和productId='100')” 使用字符串查看内存中的对象是否满足这些约束的最佳方法是什么?例如,以下模型的计算结果为真: evaluate(eval,新产品{productId='100',GUID='100'}) 任何人把我推向一个可以实现这一目标的设计模式的方向?使用和反射,可以编写一个评估方法,如下所示: public object Evaluate(

如果我有一个用户,请给出一个字符串,例如

eval=“productId='100'和(GUID='100'或(GUID='200'和productId='100')”

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

evaluate(eval,新产品{productId='100',GUID='100'})

任何人把我推向一个可以实现这一目标的设计模式的方向?

使用和反射,可以编写一个评估方法,如下所示:

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();

}




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

请阅读并接受检查。什么是最好的。。。。问题通常不太受欢迎,因为它们本质上是征求意见。退一步说,为什么邀请用户以这种格式发送信息?难道没有一种更结构化的方式来接收它吗?哇,这很强大。工作完美。谢谢
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 });