C# 为什么;((动态)字典).MyKey“;抛出RuntimeBinderException?

C# 为什么;((动态)字典).MyKey“;抛出RuntimeBinderException?,c#,dynamic,dictionary,C#,Dynamic,Dictionary,让我们想象一下这个简单的片段: Dictionary<string,string> dictionary = new Dictionary<string, string>(); dictionary.Add("MyKey", "MyValue"); string val; dictionary.TryGetValue("MyKey", out val); Console.WriteLine(val); // print "MyValue" Console.WriteL

让我们想象一下这个简单的片段:

Dictionary<string,string> dictionary = new Dictionary<string, string>();
dictionary.Add("MyKey", "MyValue");

string val;
dictionary.TryGetValue("MyKey", out val);
Console.WriteLine(val); // print "MyValue"

Console.WriteLine(((dynamic)dictionary).MyKey); // throws a RuntimeBinderException
Dictionary Dictionary=newdictionary();
添加(“MyKey”、“MyValue”);
字符串val;
TryGetValue(“MyKey”,out val);
控制台写入线(val);//打印“MyValue”
Console.WriteLine(((动态)字典).MyKey);//抛出RuntimeBinderException
为什么在最后一行抛出RuntimeBinderException

谢谢你的帮助

因为
字典
没有成员
MyKey
。动态键入不会动态创建成员


从另一个角度来看,您所尝试的操作相当于
((动态)字典)。显然,字典没有一个
get_MyKey()
方法。

但是这一行不应该添加它:dictionary.add(“MyKey”,“MyValue”)@cid,它不会给你一个成员
MyKey
,相反,你可以像
字典[“MyKey”]
@cid那样访问它。这一行向字典中添加了一个键值对,但它不会添加成员(例如,属性)。@cid要把它放在透视图中,你试图做的事情相当于
((动态)字典)。get_MyKey()
。显然,字典没有
get\u MyKey()
方法。您可能正在寻找替代方法。