将字典转换为List <keyvaluepair> </keyvaluepair>

时间:2010-12-29 19:36:17

标签: c# generics collections

我知道可以将KeyValuePair的List转换为Dictionary,但是有一种快速的方法(除了手动循环之外)还能执行相反的操作吗?

这将是手动方式,

foreach (KeyValuePair<double,double> p in dict)
{
    list.Add(new KeyValuePair<double,double>(p.Key,p.Value));
}

不是那么糟糕,但我只是好奇。

5 个答案:

答案 0 :(得分:104)

要将Dictionary<TKey, TValue>转换为List<KeyValuePair<TKey, TValue>>,您可以说

var list = dictionary.ToList();

或更详细的

var list = dictionary.ToList<KeyValuePair<TKey, TValue>>();

这是因为Dictionary<TKey, TValue>实现了IEnumerable<KeyValuePair<TKey, TValue>>

答案 1 :(得分:8)

使用linq:

myDict.ToList<KeyValuePair<double, double>>();

字典元素 KeyValuePair项。

答案 2 :(得分:5)

像杰森说的那样。但是如果你真的不需要列表,那么你可以将它转换为ICollection&lt; TKey,TValue&gt;因为它实现了这个接口,但是某些部分只是显式的。此方法执行得更好,因为它不复制整个列表,只重用相同的字典实例。

答案 3 :(得分:0)

对于.NET 2.0:

Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();
List<KeyValuePair<TKey, TValue>> myList = new List<KeyValuePair<TKey, TValue>>(dictionary);

答案 4 :(得分:0)

我一直在尝试枚举Exception.Data的实例,这是一个IDictionary。这是最终奏效的:

    ICollection keys = idict.Keys;
    foreach(var key in keys)
    {
       var value = idict[key];
       Console.WriteLine("{0}: {1}", key, value);
    }