使用此代码:
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'
我如何迭代这个集合?
答案 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
。