1

使用此代码:

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 无法将类型“System.Collections.Generic.KeyValuePair”转换为“System.DateTime”   

我如何迭代这个集合?

4

3 回答 3

3

通用字典是KeyValuePair项目列表。

要循环播放键(正如您尝试做的那样),然后循环播放FlowInformation.Keys. 您也可以直接使用循环值FlowInformation.Values

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

于 2012-08-15T23:49:15.633 回答
2

线

  foreach (DateTime key in FlowInformation)

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

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

foreach (DateTime key in FlowInformation.Keys)

另一种选择是遍历字典中的 KeyValuePair 对象,并根据需要提取键。

 foreach (var kvp in FlowInformation)
 {
     DateTime key = kvp.Key;
     ...
 }
于 2012-08-15T23:50:21.430 回答
1

ADictionary<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在循环内调用它。

于 2012-08-15T23:49:04.223 回答