1

我想使用动态值作为参数。例如

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'”?

这应该是可能的吗?

问候,尼尔斯

4

2 回答 2

1

不幸的是,目前不支持动态(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 库的创建者。

于 2014-02-24T08:45:27.833 回答
0

表达式求值器支持动态 (ExpandoObject)。它支持方法调用、属性和索引访问器、get 和 set。如果您确实遇到动态错误,请告诉我动态是相对较新的支持。

于 2014-03-16T22:06:18.777 回答