已解析表达式中的动态参数

Dynamic parameter in parsed expression

了解我的情况的快速示例:

static Interpreter ParseInterpreter = new Interpreter();
...
var func = ParseInterpreter.Parse("ctx.SomeProp", new Parameter("ctx", typeof(???1)).Compile<Func<???2, object>>;
...
var token = JToken.Parse(s);
dynamic dToken = token;
var obj = func(dToken);

换句话说,有没有办法将一些动态参数传递给 Parse 方法,然后得到一个接受这些参数的仿函数?

可以直接使用Parse方法返回的Lambdaclass,不调用Compile函数:

var interpreter = new Interpreter()
string expression = "ctx.SomeProp";
Lambda parsedExpression = interpreter.Parse(expression, new Parameter("ctx", typeof(object)));
var token = JToken.Parse(s);
var result = parsedExpression.Invoke(token);

我没有准确地测试过你的代码,但是例如我有一个这样的测试可以正常工作:

dynamic dyn = new ExpandoObject();
dyn.Foo = "bar";
var interpreter = new Interpreter()
    .SetVariable("dyn", (object)dyn);
Assert.AreEqual(dyn.Foo, interpreter.Eval("dyn.Foo"));

考虑到这仅适用于 .NET 4.x,不支持 .NET Standard/Core 动态。