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。
这可能与KeyValuePair在 System.Collections.Generic 中和Hashtable在 System.Collections 中有关吗?

4

3 回答 3

3

You can either use a loop or, if you want an one-liner:

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

Log while you are looping.

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 回答