我正在使用.net 3.5,我有这个:
SortedList<int, BrainTickTransition>
我想要其中一个:
List<BrainTickTransition>
有没有快速的方法来执行此操作而无需复制SortedList中的所有值?
答案 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