为什么词典"不包含' ElementAt'"?

时间:2015-10-07 16:32:15

标签: c# dictionary dynamic

为什么词典"不包含' ElementAt'"的定义?在动态编程期间

        Dictionary<string, dynamic> D1 = new Dictionary<string, dynamic>();
        D1.Add("w1", 10);
        D1.Add("w2", false);
        Dictionary<string, dynamic> D2 = new Dictionary<string, dynamic>();
        D2.Add("v1", 10);
        D2.Add("v2", D1);
        textBox1.Text += D2.ElementAt(1).Value.ElementAt(1).Value;

我们应该在textbox1&#34; false&#34;
上得到结果 但相反,我们会得到运行时错误:&#34;不包含&#39; ElementAt&#39;&#34;

的定义

如果您输入:

        Dictionary<string, dynamic> var1 = D2.ElementAt(1).Value;
        textBox1.Text += var1.ElementAt(1).Value;

然后它会正常工作!

2 个答案:

答案 0 :(得分:3)

这里有两件事是错的:

  • 您假设您添加到D2的第二个条目是D2.ElementAt(1)检索到的条目。不要做出这样的假设:字典基本上是无序的。
  • 您正在对Enumerable.ElementAt类型的表达式调用扩展方法(dynamic

您可以通过显式调用Enumerable.ElementAt作为静态方法来解决第二个问题:

textBox1.Text += Enumerable.ElementAt(D2.ElementAt(1).Value, 1).Value;

尽管如此,这仍然是第一部分。目前尚不清楚你想要达到的目标,这意味着我不清楚我应该向那个部分提出什么样的建议......

答案 1 :(得分:0)

另一个解决方案,对我来说,我需要添加对System.Linq的引用,一切正常,不需要修改代码。