C# 将字典转换为列表<;KeyValuePair>;

C# 将字典转换为列表<;KeyValuePair>;,c#,generics,collections,C#,Generics,Collections,我知道可以将KeyValuePair列表转换为字典,但是否有一种快速的方法(除了手动循环)来执行反之亦然的操作 这将是手动方式 foreach (KeyValuePair<double,double> p in dict) { list.Add(new KeyValuePair<double,double>(p.Key,p.Value)); } foreach(dict中的KeyValuePair p) { 添加(新的KeyValuePair(p.Key,p.V

我知道可以将KeyValuePair列表转换为字典,但是否有一种快速的方法(除了手动循环)来执行反之亦然的操作

这将是手动方式

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

其实没那么糟糕,但我只是好奇而已。

要将
字典
转换成
列表
,你可以说

var list = dictionary.ToList();
还是更冗长

var list = dictionary.ToList<KeyValuePair<TKey, TValue>>();
var list=dictionary.ToList();
这是因为
Dictionary
使用linq实现
IEnumerable

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

字典元素是
KeyValuePair
项。

就像Jason说的那样。但是,如果您真的不需要列表,那么您可以将其强制转换为
i集合
;因为它实现了这个接口,但有些部分只是显式的。此方法性能更好,因为它不会复制整个列表,只会重用相同的字典实例。

对于.NET 2.0:

Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();
List<KeyValuePair<TKey, TValue>> myList = new List<KeyValuePair<TKey, TValue>>(dictionary);
Dictionary Dictionary=newdictionary();
列表myList=新列表(字典);

我一直在尝试枚举Exception.Data的一个实例,它是一个IDictionary。这就是最终成功的原因:

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

施法速度无限快。如果你只在小列表中做了几次,这一点是不明显的,但仍然很重要。@Jason:不是这样。调用extensionmethod Enumerable.ToList可能代价高昂。从另一个角度看,它必须返回一个新的列表,否则你可以通过向列表中添加项目来向字典中添加项目,这会很奇怪。为什么人们一直称这些事情为不必要的微优化?你怎么知道他不会在包含一百万个元素的列表中运行一千次呢?以最好的方式学习和做事不是总是更好吗?如果他在学习软件编程的同时对这些事情不做评论,会更好吗?好吧,这不是我的问题,这样我知道我永远都有工作。@fejesjoco:因为人们像1980年一样被周期和字节所奴役。通常过于强调性能优先于代码的清晰性和其他问题。性能不再是最终目标(例如,对于移动设备,我们应该优化功耗,而不是性能!)我不知道他不会在包含一百万个元素的列表中运行一千次,但我怀疑他不会。如果他是,我仍然怀疑这是否重要。即使这真的很重要,他也有更大的问题要担心,因为他做错了什么。你们谈论这个优化就像它不可读或者功能不太强大之类的,这太荒谬了。如果您所需要的只是一个集合,那么这非常有效,并且是首选方法,您不需要牺牲任何可读性,而且它的速度会无限快(在少数情况下,这可能很重要)。这不是一个不必要的微观优化,它只是一个良好的实践。OTOH,如果需要列表,请点击并调用.ToList();--无论哪种方式,您的代码都很容易阅读,并且可能在不牺牲可读性的情况下以尽可能快的速度阅读;这要简单得多:
foreach(dict中的KeyValuePair p){list.Add(p);}
值得注意的是,您必须添加
System.Linq作为一个使用。