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 オブジェクトが含まれています。

これにはいくつかの方法があります。1 つのオプションは、実際には DateTime オブジェクトである辞書のKeysを反復処理することです。

foreach (DateTime key in FlowInformation.Keys)

もう 1 つのオプションは、ディクショナリ内の 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 に答える