擴展方法ToList()
如何工作?假設我有一個IEnumerable
10000個項目。將ToList()
創建一個新的List
並遍歷10000000項的IEnumerable
,然後返回給我一個List
或.NET是否以其他方式執行?IEnumerable上的ToList()如何工作?
這個MSDN link談論立即執行數據庫查詢。我的問題只是關於將IEnumerable
轉換爲List
。
擴展方法ToList()
如何工作?假設我有一個IEnumerable
10000個項目。將ToList()
創建一個新的List
並遍歷10000000項的IEnumerable
,然後返回給我一個List
或.NET是否以其他方式執行?IEnumerable上的ToList()如何工作?
這個MSDN link談論立即執行數據庫查詢。我的問題只是關於將IEnumerable
轉換爲List
。
它不一定重複,雖然這是「最壞的情況」的情況。基本上它叫new List<T>(source)
,但是它有一些小竅門:如果源實現ICollection<T>
,構造函數可以調用ICollection<T>.CopyTo()
將完整的數據複製到一個數組中。這可能比單步迭代更有效地實現。同樣在ICollection<T>
的情況下,新列表知道開始的最終大小,所以它不需要繼續擴展它的內部緩衝區。請參閱我的Edulinq ToList()
blog post。
.ToList
擴展方法調用List<T>
構造函數將其傳遞給IEnumerable<T>
。此構造函數將遍歷IEnumerable<T>
並按照它們返回的相同順序複製IEnumerable<T>
的elemtns。
上述鏈接不起作用。你可以在這裏導航到Jon的帖子 - [Edulinq ToList()blog post](https://codeblog.jonskeet.uk/2011/01/01/reimplementing-linq-to-objects-part-20-tolist/) – vibhu
@ vibhu:更新了鏈接。 –