C# 为什么是字典;不包含';ElementAt'&引用;?

C# 为什么是字典;不包含';ElementAt'&引用;?,c#,dictionary,dynamic,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, dyn

动态编程期间为什么字典“不包含‘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;
Dictionary D1=新字典();
D1.添加(“w1”,10);
D1.加入(“w2”,虚假);
字典D2=新字典();
D2.添加(“v1”,10);
D2.添加(“v2”,D1);
textBox1.Text+=D2.ElementAt(1).Value.ElementAt(1).Value;
我们应该在textbox1“false”上得到结果
但我们将得到运行时错误:“不包含‘ElementAt’的定义”

如果要输入:

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

然后它会正常工作

这里有两件事不对:

  • 您假设添加到
    D2
    的第二个条目是由
    D2.ElementAt(1)
    检索的条目。不要这样假设:字典基本上是无序的
  • 您正在对类型为
    dynamic
    的表达式调用扩展方法(
    Enumerable.ElementAt
您可以通过以静态方法显式调用
Enumerable.ElementAt
来解决第二个问题:

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

但这仍然会使第一部分成为一个问题。不清楚您试图实现什么,这意味着不清楚我应该建议对该部分进行什么修复…

另一个解决方案,对我来说,我需要添加一个对系统的引用。Linq和所有东西都可以工作,不需要修改代码。

是什么让您认为应该得到“false”?请记住,字典不是按顺序排列的。什么是完整的运行时错误?D2.ElementAt(1).Value.ElementAt(0).Value将是“10”,但D2.ElementAt(1).Value.ElementAt(1).Value将是“false”。字典不包含
ElementAt
,即使没有“动态编程”。如果您尝试D2[“v2”]。Value.ElementAt(1).值,然后再次出现错误,原因与我的回答相同。但是您似乎仍然过于自信地认为
D2.ElementAt(1)
返回与键“v2”关联的条目,而不是与键“v1”关联的条目。目前它可能恰好是这样工作的,但这并不能保证,您的代码也不应该做出这样的假设。我明白了!你有没有其他的想法,如何以更紧凑的方式和更少量的代码来完成它?@Iremadze:正如我所说的,当我们不知道你想要实现什么时,我们真的不能提出任何建议。