C# 为什么是字典;不包含';ElementAt'&引用;?
动态编程期间为什么字典“不包含‘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
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:正如我所说的,当我们不知道你想要实现什么时,我们真的不能提出任何建议。