2012-12-06 39 views
8

Phương thức mở rộng ToList() hoạt động như thế nào? Giả sử tôi có một số IEnumerable trong số 10000 mục. Sẽ ToList() tạo một List mới và lặp lại trên IEnumerable trong 10000 mục và sau đó trả lại cho tôi một số List hoặc .NET thực hiện theo cách khác?Làm thế nào để ToList() trên một công việc IEnumerable?

Điều này MSDN link nói về việc thực hiện ngay lập tức truy vấn DB. Câu hỏi của tôi chỉ là chuyển đổi IEnumerable thành List.

Trả lời

22

Nó không nhất thiết phải lặp lại, mặc dù đó là trường hợp "trường hợp xấu nhất". Về cơ bản nó gọi new List<T>(source), nhưng có một số thủ thuật lên tay áo của nó: nếu nguồn thực hiện ICollection<T>, hàm tạo có thể gọi ICollection<T>.CopyTo() để sao chép dữ liệu hoàn chỉnh vào một mảng. Điều này cũng có thể được thực hiện hiệu quả hơn so với lặp đi lặp lại một bước. Tương tự như vậy trong trường hợp ICollection<T>, danh sách mới biết kích thước cuối cùng để bắt đầu, do đó, nó sẽ không cần phải tiếp tục mở rộng bộ đệm trong của nó.

Để biết thêm chi tiết, hãy xem Edulinq ToList() blog post của tôi.

+0

Liên kết ở trên không hoạt động. Bạn có thể điều hướng đến bài đăng của Jon tại đây - [bài đăng trên blog Edulinq ToList()] (https://codeblog.jonskeet.uk/2011/01/01/reimplementing-linq-to-objects-part-20-tolist/) – vibhu

+0

@ vibhu: Đã cập nhật liên kết. –

2

Phương thức mở rộng .ToList gọi số IEnumerable<T>. Hàm khởi tạo này sẽ lặp lại qua số IEnumerable<T> và sao chép các elemtns của số IEnumerable<T> theo thứ tự chúng được trả về.

Các vấn đề liên quan