为什么在动态编程期间字典“不包含'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上获得结果“ false”
但是相反,我们会收到运行时错误:“不包含'ElementAt'的定义”

如果您输入:

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


然后它将正常工作!

最佳答案

这里有两件事是错误的:


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


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

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


但是,这仍然将第一部分作为问题。目前尚不清楚您要实现的目标,这意味着尚不清楚我应该针对该部分建议什么解决方案...

关于c# - 为什么字典“不包含'ElementAt'的定义”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32997696/

10-16 04:59