2

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

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

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

obj.Test="TestValue";

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

4

1 回答 1

1

为此,您需要将 to 强制ExpandoObject转换为IDictionary<string, object>.

这是正常的 Expando 用法:

obj.Test = "TestValue";

这是字符串文字(或字符串变量)的用法:

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

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

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

于 2012-07-30T13:21:44.297 回答