如何在Array中获取Dictionary的键和值?

时间:2017-01-18 12:04:59

标签: c# .net arrays

我向key添加了一些valuearray字典,现在当我试图获取所有对时,我收到了一些错误:

这是代码:

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]这样的索引,我只会得到第一项或第二项的关键字和值,但不是全部。

我该怎么办?

2 个答案:

答案 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,以使其更具可读性。