使用带浓缩咖啡的动态类型

时间:2014-02-24 08:01:56

标签: dynamic-expresso

我想使用动态值作为参数。 E.g。

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

这应该是可能的吗?

此致,Niels

2 个答案:

答案 0 :(得分:1)

不幸的是,现在不支持动态(ExpandoObject)。我将在下一个版本中考虑此功能。

可能的解决方法是使用匿名对象:

dynamic dyn = new ExpandoObject();
dyn.Foo = "bar";

var bar = new Interpreter().Eval("d.Foo", new Parameter("d", new { Foo = dyn.Foo }));

考虑在这种情况下,在创建参数时会评估属性。

您还可以将动态转换为匿名类型(请参阅Cast ExpandoObject to anonymous type),但结果并没有太大差异。

免责声明:我是Dynamic Expresso库的创建者。

答案 1 :(得分:0)

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