循环访问集合时出错

时间:2012-08-15 23:45:54

标签: c#

使用此代码:

Dictionary<DateTime, double> FlowInformation = new Dictionary<DateTime, double>();

foreach (DateTime key in FlowInformation)
{
    if (initialialrec != 0)
    {
        if (FlowInformation[key] > initialialrec)
            flow = key.ToShortDateString() + " " + key.ToShortTimeString() + "+";

        if (FlowInformation[key] < initialialrec)
            flow = key.ToShortDateString() + " " + key.ToShortTimeString()+"-";

        initialialrec = FlowInformation[key];
        file.WriteLine(flow);
    }

    FlowInformation.Clear();                    
}

我收到编译错误:

Strategy\theFlowStrategy.cs Cannot convert type 'System.Collections.Generic.KeyValuePair' to 'System.DateTime'   

我如何迭代这个集合?

3 个答案:

答案 0 :(得分:3)

通用词典是KeyValuePair项目的列表。

要循环键(正如您尝试的那样),然后循环FlowInformation.Keys。您还可以使用FlowInformation.Values直接循环访问值。

您可以做的另一件事是使用KeyValuePair作为迭代变量类型。这将节省您必须执行FlowInformation[key]以找出与您的密钥对应的值,因为该值将位于迭代变量的.Value属性中。

答案 1 :(得分:2)

该行

  foreach (DateTime key in FlowInformation)

不正确。正如错误消息所述,您的字典不包含DateTime对象,它包含KeyValuePair对象。

有几种方法可以解决这个问题。 一种选择是遍历dicitonary的 Keys ,它们确实是DateTime对象。

foreach (DateTime key in FlowInformation.Keys)

另一种选择是迭代字典中的KeyValuePair对象,并根据需要提取密钥。

 foreach (var kvp in FlowInformation)
 {
     DateTime key = kvp.Key;
     ...
 }

答案 2 :(得分:1)

Dictionary<T,T>包含KeyValuePair<T,T>的列表。

我不知道您的整个代码,但我认为initialrec是一个数字(double)而flow是一个字符串。 看看这个:

        Dictionary<DateTime, double> FlowInformation = new Dictionary<DateTime, double>();

        double initialialrec;
        string flow;

        foreach (KeyValuePair<DateTime, double> Entry in FlowInformation)
        {
            if (initialialrec != 0)
            {
                if (Entry.Value > initialialrec)
                    flow = Entry.Key.ToShortDateString() + " " + Entry.Key.ToShortTimeString() + "+";

                if (Entry.Value < initialialrec)
                    flow = Entry.Key.ToShortDateString() + " " + Entry.Key.ToShortTimeString() + "-";

                initialialrec = Entry.Value;
                file.WriteLine(flow);
            }
        }

但是你不能在循环中调用Clear

相关问题