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:更新了链接。