我正在使用 .net 3.5,我有以下代码:
SortedList<int, BrainTickTransition>
我想要其中的一个:
List<BrainTickTransition>
有没有一种快速的方法可以不必复制SortedList中的所有值就能完成这个操作?我正在使用 .net 3.5,我有以下代码:
SortedList<int, BrainTickTransition>
我想要其中的一个:
List<BrainTickTransition>
有没有一种快速的方法可以不必复制SortedList中的所有值就能完成这个操作?这些值需要被复制,因为无法在List<TValue>
和SortedList<TKey,TValue>
之间共享内存。
我假设你想要一个只包含值而不关心键的List<TValue>
,你可以使用以下代码实现:
sortedList.Values.ToList();
但是,如果你只需要一个 IList<TValue>
(而不是具体的类 List<TValue>
),你可以直接使用 Values
属性,从而避免创建副本。
当然,这些解决方案在原始集合被修改时语义上存在差异。复制的 List<TValue>
不会反映更改,而由 Values
属性引用的 IList<TValue>
将反映更改,即使将其分配给另一个变量也是如此。
new List<TValue>(sortedList.Values)
,再也没有人想和它玩了。 :-) - Jon这是有效的:
myList = new List<string>(mySortedList.Values);
(感谢@Jon的评论)。
新的List将永远看不到对sortedList的后续更改。 这对于SortedList仅用于临时使用或排序是用于历史参考的情况非常完美。
然而,@CodesInChaos的答案并不起作用:无效:
myList = mySortedList.Values.ToList();
ToList() 出现异常:IList<string> 没有 ToList 的定义