我正在尝试理解 c# 动态。我有一个分配给动态变量的 ExpandoObject 实例。我了解 ExpandoObject 正在实施 IDictionary。但是下面的分配失败了。
dynamic obj = new ExpandoObject();
obj["Test"] = "TestValue";
Console.WriteLine(obj.Test);
有人可以告诉我哪里出错了吗?
obj.Test="TestValue";
然而,上述声明似乎工作正常。
我正在尝试理解 c# 动态。我有一个分配给动态变量的 ExpandoObject 实例。我了解 ExpandoObject 正在实施 IDictionary。但是下面的分配失败了。
dynamic obj = new ExpandoObject();
obj["Test"] = "TestValue";
Console.WriteLine(obj.Test);
有人可以告诉我哪里出错了吗?
obj.Test="TestValue";
然而,上述声明似乎工作正常。
为此,您需要将 to 强制ExpandoObject
转换为IDictionary<string, object>
.
这是正常的 Expando 用法:
obj.Test = "TestValue";
这是字符串文字(或字符串变量)的用法:
var d = (IDictionary<string, object>)obj;
d["Test"] = "TestValue";
string s = "Test";
d[s] = "TestValue";
如果接口实现是显式的,则需要强制转换为接口的引用才能访问成员。我猜这就是这里发生的事情。