我想了解c#dynamic。我有一个分配给动态变量的ExpandoObject实例。 我理解ExpandoObject正在实现IDictionary。但是下面的分配失败了。
dynamic obj = new ExpandoObject();
obj["Test"] = "TestValue";
Console.WriteLine(obj.Test);
有人能告诉我哪里出错了吗?
obj.Test="TestValue";
然而,上述声明似乎工作正常。
答案 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";
如果接口实现是显式的,则需要转换为接口的引用才能访问成员。我猜这就是这里发生的事情。