我想使用动态值作为参数。例如
dynamic dyn = new ExpandoObject();
dyn.Foo = "bar";
var bar = new Interpreter().Eval("d.Foo", new Parameter("d", dyn));
Assert.AreEqual("bar", bar.ToString());
但是我收到一条错误消息,提示“'ExpandoObject' 类型中不存在属性或字段 'Foo'”?
这应该是可能的吗?
问候,尼尔斯
我想使用动态值作为参数。例如
dynamic dyn = new ExpandoObject();
dyn.Foo = "bar";
var bar = new Interpreter().Eval("d.Foo", new Parameter("d", dyn));
Assert.AreEqual("bar", bar.ToString());
但是我收到一条错误消息,提示“'ExpandoObject' 类型中不存在属性或字段 'Foo'”?
这应该是可能的吗?
问候,尼尔斯
不幸的是,目前不支持动态(ExpandoObject)。我会在下一个版本中考虑这个功能。
一种可能的解决方法是使用匿名对象:
dynamic dyn = new ExpandoObject();
dyn.Foo = "bar";
var bar = new Interpreter().Eval("d.Foo", new Parameter("d", new { Foo = dyn.Foo }));
考虑在这种情况下,当您创建参数时会评估属性。
您还可以将动态转换为匿名类型(请参阅将 ExpandoObject 转换为匿名类型),但结果差别不大。
免责声明:我是 Dynamic Expresso 库的创建者。
表达式求值器支持动态 (ExpandoObject)。它支持方法调用、属性和索引访问器、get 和 set。如果您确实遇到动态错误,请告诉我动态是相对较新的支持。