如何从 SortedList<int, T> 创建一个 List<T>?

10

我正在使用 .net 3.5,我有以下代码:

SortedList<int, BrainTickTransition>

我想要其中的一个:

List<BrainTickTransition>
有没有一种快速的方法可以不必复制SortedList中的所有值就能完成这个操作?

1
考虑 SortedList.Values 属性。 - Hans Passant
我有一个数据契约,它序列化了一个List<BrainTickTransition>,这就是为什么我需要List<T>的原因。 - Almo
2个回答

19

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

我假设你想要一个只包含值而不关心键的List<TValue>,你可以使用以下代码实现:

sortedList.Values.ToList();

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

当然,这些解决方案在原始集合被修改时语义上存在差异。复制的 List<TValue> 不会反映更改,而由 Values 属性引用的 IList<TValue> 将反映更改,即使将其分配给另一个变量也是如此。


看起来就是这样了,谢谢。计时器结束后接受答案。 :) - Almo
6
可怜的 new List<TValue>(sortedList.Values),再也没有人想和它玩了。 :-) - Jon

2

这是有效的:

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

(感谢@Jon的评论)。
新的List将永远看不到对sortedList的后续更改。 这对于SortedList仅用于临时使用或排序是用于历史参考的情况非常完美。

然而,@CodesInChaos的答案并不起作用:无效

myList = mySortedList.Values.ToList();

ToList() 出现异常:IList<string> 没有 ToList 的定义


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接