我向key
添加了一些value
,array
字典,现在当我试图获取所有对时,我收到了一些错误:
这是代码:
protected void Button1_Click(object sender, EventArgs e)
{
if (DropDownList1.SelectedValue.ToString() == "January")
{
Dictionary<string, int>[] temperatures = new Dictionary<string, int>[2];
temperatures[0]=new Dictionary<string, int>();
temperatures[1]=new Dictionary<string, int>();
temperatures[0].Add("Day1",22);
temperatures[1].Add("Day2",23);
foreach (KeyValuePair<string,int> temperture in temperatures[])
{
Label1.Text = string.Format("at {0} the temperture is {1} degree", temperture.Key, temperture.Value);
}
}
}
现在错误或问题就在这一行:
foreach (KeyValuePair<string,int> temperture in temperatures[])
如果我写temperatures[]
,我会收到错误消息:
语法错误,预期值为
调用
indexer有1个参数,但它用0参数()
如果我添加像temperatures[0]
或temperatures[1]
这样的索引,我只会得到第一项或第二项的关键字和值,但不是全部。
我该怎么办?
答案 0 :(得分:8)
由于temperatures
是一个字典数组 - 您必须明确指出您正在访问此数组的哪个元素。
所以,如果你需要遍历数组中所有字典的所有对 - 只需再添加一个循环:
foreach (var t in temperatures)
{
foreach (KeyValuePair<string,int> temperture in t)
{
// do whatever yoou need
}
}
答案 1 :(得分:0)
您可以使用SelectMany
展平字典集合,以便迭代每个字典中的每个KeyValuePair
:
foreach(var temperature in temperatures
.SelectMany(t => t))
{
Label1.Text = $"at {temperature.Key} the temperture is {temperature.Value} degree";
}
另请注意interpolated string而不是String.Format
,以使其更具可读性。