将数据添加到ExpandoObject(如字典)时出错

时间:2012-07-30 13:19:07

标签: c#-4.0 dynamic dynamic-language-runtime

我想了解c#dynamic。我有一个分配给动态变量的ExpandoObject实例。 我理解ExpandoObject正在实现IDictionary。但是下面的分配失败了。

dynamic obj = new ExpandoObject();
obj["Test"] = "TestValue";
Console.WriteLine(obj.Test);

有人能告诉我哪里出错了吗?

obj.Test="TestValue";

然而,上述声明似乎工作正常。

1 个答案:

答案 0 :(得分:1)

为此,您需要将ExpandoObject转换为IDictionary<string, object>

这是正常的Expando用法:

obj.Test = "TestValue";

这是string-literal(或字符串变量)用法:

var d = (IDictionary<string, object>)obj;
d["Test"] = "TestValue";

string s = "Test";
d[s] = "TestValue";

如果接口实现是显式的,则需要转换为接口的引用才能访问成员。我猜这就是这里发生的事情。