dynamic-expresso - 解析表达式中的动态参数
问题描述
了解我的情况的快速示例:
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 方法,然后得到一个接受这些参数的函子?
解决方案
可以直接使用方法Lambda
返回的类Parse
,不调用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 动态。
推荐阅读
- javascript - 如何使用 ExpressJS 发出查询请求
- templates - 带有模板化 TEST_CLASSes 的 CppUnitTestingFramework
- javascript - 如何在Javascript中附加单选按钮?
- reactjs - 数据是如何在反应中从孩子传递给父母的?
- csv - Apache NiFi:通过将多行与各种数据进行比较来创建新列
- php - 如何在 Opencart3 中将动态内容放入产品描述中?
- ray - 让 Tune 跨多个 GPU 运行并行试验的方法是什么?
- python - 无法使用 sys.argv --bind 运行 gunicorn
- xml - 从 XSLT 中的字符串获取日期和时间
- sql - 查找所有使用我的序列的地方