2

Hashtable値をログに記録しようとしている があります。の名前Hashtableは「小道具」です。私のコードは次のとおりです。

    Dictionary<string, string> keyPairs = new Dictionary<string, string>();
    foreach (KeyValuePair<string, string> items in props)
    {
       keyPairs.Add(items.Key, items.Value);
    }

    Logging.Instance.WriteInformation(string.Format("Key: {0} \t Value: {1}", keyPairs.Keys, keyPairs.Values));

ただし、これInvalidCastExceptionは実行時に発生します。

キーと値のペアをログに記録するためのより簡単で賢明な方法はありますか? 理想的には、出力は次のようになります。

 key1        value1
 key2        value2
 key3        value3

追加で考えたように、デバッグでは、foreach ループの開始時に例外が発生するようです。としても設定しようとしましKeyValuePair<string, object>たが、同じ InvalidCastException が発生します。これは、 System.Collections.Generic 内にあり、System.Collections 内に
あることに何か関係があるのでしょうか?KeyValuePairHashtable

4

3 に答える 3

3

ループを使用するか、ワンライナーが必要な場合は次のいずれかを使用できます。

var allPairs = string.Join(Environment.NewLine, 
    keyPairs.Select(kvp => string.Format("Key: {0} \t Value: {1}", kvp.Key, kvp.Value)));
Logging.Instance.WriteInformation(allPairs);
于 2013-02-22T19:56:57.323 に答える
2

もちろん、ループするだけです:

for (var entry : keyPairs)
{
    Logging.Instance.WriteInformation(string.Format("Key: {0} \t Value: {1}", 
                                      entry.Key, entry.Value);
}

ほんの数行です。複数の場所で必要な場合は、簡単にメソッドに入れることができます。

于 2013-02-22T19:54:16.293 に答える
1

ループ中にログを記録します。

Dictionary<string, string> keyPairs = new Dictionary<string, string>();
foreach (KeyValuePair<string, string> items in props)
{
   keyPairs.Add(items.Key, items.Value);
   Logging.Instance.WriteInformation(string.Format("Key: {0} \t Value: {1}", items.Key, items.Value));
}
于 2013-02-22T19:55:40.177 に答える