我有IEnumerable<Int32>
,我想将其转换为List<Int32>
。
最好的方法是什么? (没有遍历IEnumerable)
答案 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>
,(无论你是否手动完成),但这些方法中的一种或两种都可以运行更多如果原始IEnumerable
是List<T>
或ICollection<T>
,则有效而不是简单的枚举。
此外,如果您使用非通用IEnumerable
,则需要先使用IEnumerable<T>
转换为IEnumerable
,然后才能使用Cast<T>
扩展程序使用其中任何一种{{1}}
答案 3 :(得分:2)
new List(enumerable);
当然,这会迭代后台中的所有元素,但不管怎么说都不可能,原因有两个:
List<T>
不是另一个列表的包装器,而是动态大小的数组的实现。 List<T>
提供IEnumerable<T>
没有的方法和属性(如Count
),如果不迭代所有元素,则无法确定。