如何从IEnumerable <t>很好地转换为List <t>?</t> </t>

时间:2010-12-03 16:20:44

标签: c# .net

我有IEnumerable<Int32>,我想将其转换为List<Int32>。 最好的方法是什么? (没有遍历IEnumerable)

4 个答案:

答案 0 :(得分:12)

当然可以在其上调用 ToList()方法

答案 1 :(得分:8)

必须迭代IEnumerable 始终才能生成列表。是的,您可以通过使用IEnumerable&lt;&gt; .ToList()扩展方法来避免编写代码。它仍然是O(n)。

答案 2 :(得分:3)

您可以使用IEnumerable<T>上的ToList扩展程序或List<T> constructor that takes an IEnumerable<T>

IEnumerable<int> numbers = ...;
List<int> numberList = numbers.ToList();
List<int> numberList2 = new List<int>(numbers);

无论如何,正如其他人所说,你必须枚举原始的Enumerable<int>,(无论你是否手动完成),但这些方法中的一种或两种都可以运行更多如果原始IEnumerableList<T>ICollection<T>,则有效而不是简单的枚举。

此外,如果您使用非通用IEnumerable,则需要先使用IEnumerable<T>转换为IEnumerable,然后才能使用Cast<T>扩展程序使用其中任何一种{{1}}

上的方法

答案 3 :(得分:2)

new List(enumerable);

使用copy constructor

当然,这会迭代后台中的所有元素,但不管怎么说都不可能,原因有两个:

  1. List<T>不是另一个列表的包装器,而是动态大小的数组的实现。
  2. List<T>提供IEnumerable<T>没有的方法和属性(如Count),如果不迭代所有元素,则无法确定。