C# ToList()如何处理IEnumerable工作?

C# ToList()如何处理IEnumerable工作?,c#,.net,list,ienumerable,C#,.net,List,Ienumerable,扩展方法ToList()是如何工作的?假设我有一个包含10000项的IEnumerable。ToList()是否会创建一个新的列表并迭代10000个项目的IEnumerable,然后返回一个列表,或者.NET是否会以其他方式执行此操作 这涉及直接执行数据库查询。我的问题只是将IEnumerable转换为列表它不一定迭代,尽管这是“最坏情况”的情况。基本上,它调用newlist(source),但这有一些技巧:如果源代码实现ICollection,构造函数可以调用将完整数据复制到数组中。这可能比单

扩展方法
ToList()
是如何工作的?假设我有一个包含10000项的
IEnumerable
ToList()
是否会创建一个新的
列表
并迭代10000个项目的
IEnumerable
,然后返回一个
列表
,或者.NET是否会以其他方式执行此操作


这涉及直接执行数据库查询。我的问题只是将
IEnumerable
转换为
列表

它不一定迭代,尽管这是“最坏情况”的情况。基本上,它调用
newlist(source)
,但这有一些技巧:如果源代码实现
ICollection
,构造函数可以调用将完整数据复制到数组中。这可能比单步迭代更有效地实现。同样,在
ICollection
案例中,新列表知道要开始的最终大小,因此不需要继续扩展其内部缓冲区


有关更多详细信息,请参见my。

.ToList
扩展方法调用构造函数,并将
IEnumerable
传递给它。此构造函数将迭代
IEnumerable
,并按照返回的相同顺序复制
IEnumerable
的元素。

上述链接不起作用。你可以在这里导航到Jon的帖子-@vibhu:更新了链接。