如何从SortedList <int,t =“”>?</int,> </t>创建List <t>

时间:2011-12-08 22:51:47

标签: .net list sortedlist

我正在使用.net 3.5,我有这个:

SortedList<int, BrainTickTransition>

我想要其中一个:

List<BrainTickTransition>

有没有快速的方法来执行此操作而无需复制SortedList中的所有值?

2 个答案:

答案 0 :(得分:15)

需要复制值,因为无法在List<TValue>SortedList<TKey,TValue>之间共享内存。

我假设您想要一个包含值的List<TValue>而不关心密钥,您可以这样做:

sortedList.Values.ToList();

但是如果你只需要IList<TValue>(而不是具体的类List<TValue>),你可以直接使用Values属性,从而避免创建副本。

当然,当原始集合被修改时,这些解决方案的语义不同。 List<TValue>副本不会反映更改,而IList<TValue>属性引用的Values将反映更改,即使您将其分配给另一个变量。

答案 1 :(得分:0)

这有效:

myList = new List<string>(mySortedList.Values);

(@ Jon提供的注释)。
new List将永远不会看到对sortedList的后续更改。 对于将SortedList仅用于临时用途或将Sorted用于历史参考的情况而言,这是完美的选择。

但是,@ CodesInChaos的the answer不能
不起作用

myList = mySortedList.Values.ToList();

ToList()失败,但出现以下异常:IList<string> does not contain a definition for ToList