从字典C#中获取值的计数

时间:2016-07-21 14:36:32

标签: c# debugging for-loop dictionary

我有一个Dictionary,其中有一个ID作为键,列表列表作为值。我想知道列表中有多少列表。当我在调试时查询它时,这似乎给出了正确的值,但是当我去尝试访问那些数据时,它只给出1而不是2的数量。我确定这是我缺少但我不能放的东西我的手指在上面。

这是我通过调试检查时的计数: enter image description here

当我尝试访问2的计数时,就是这样: enter image description here

整个方法是:

public static List<string> getStatisticsCSVHeaders(List<Items> itemList, Dictionary<int, List<List<Statistic>>> availableStats)
{
    List<string> topRow = new List<string>();

    for (int i = 0; i < availableStats.Values.Count; i++)
    {
        topRow.Add("Phase " + (i+1));
        for (int k = 0; k < itemList.Count; k++)
            topRow.Add(getMetricHeader(itemList[k], true));
    }

    return topRow;
}

我希望列表中的列表数量为行i < availableStats.Values.Count的计数器。

编辑: 我应该提一下,我已经尝试availableStats.Values[0].Count,但这不会编译。

2 个答案:

答案 0 :(得分:5)

调试器显示您的词典中有一个项目,该项目是包含2个元素的列表。因为你的代码占用了字典中的项目数,你得到1。

要获取该词典中所有列表中所有项目的数量,请尝试LINQ和Sum

availableStats.Values.Sum(x => x.Count)

答案 1 :(得分:0)

在您的问题中,由于value包含一个列表,因此它可能包含空值,因此有必要对值进行空值检查,否则在LINQ查询中会出现错误。

var totalCount = availableStats.Values.Sum(x => x==null? 0 : x.Count);

还有另一种获得相同结果的方法,如下所示:

var totalCount = availableStats.Sum(x => x.Value==null? 0 : x.Value.Count);