2013-07-03 43 views
34

Bằng cách đọc các bài viết tương tự, tôi đã học được rằng một Danh sách là một loại IEnumerable. Nhưng tôi thực sự tự hỏi sự khác biệt thực tế giữa hai thực sự là gì.Sự khác biệt thực tế giữa Danh sách và IEnumerable

Để ai đó luôn đã sử dụng một danh sách và không bao giờ sử dụng IEnumerable:

  • chênh lệch thực tế giữa hai là gì?
  • Trong trường hợp nào là một trong số đó tốt hơn so với trường hợp khác?

Đây là một thực tế dụ: Chúng tôi muốn để lưu trữ bốn dây, sắp xếp chúng theo thứ tự abc, vượt qua chúng để chức năng khác và sau đó hiển thị cho người sử dụng kết quả. Chúng ta sẽ sử dụng cái gì và tại sao?

Hy vọng rằng ai đó có thể sắp xếp điều này cho tôi hoặc chỉ cho tôi đi đúng hướng. Cảm ơn bạn trước!

+2

Một danh sách 'không phải là một loại' IEnumerable' nó thỏa mãn hợp đồng mà 'IEnumerable' đặt ra (tức là nó có thể được sử dụng như là một 'IEnumerable'). Nếu bạn muốn lưu trữ chuỗi, bạn sẽ sử dụng danh sách. Bạn không thể sử dụng một số đếm được vì đó không phải là một lớp học. Bạn có thể truy cập vào danh sách như một liệt kê nếu bạn muốn. –

+6

Điều này không được đánh dấu là câu hỏi trùng lặp. Các câu hỏi khác nói về IEnumberable vs Danh sách khi sử dụng LINQ. Câu hỏi này không phải về LINQ. – JMS10

Trả lời

114

Một sự khác biệt quan trọng giữa IEnumerable và List (bên cạnh một giao diện và lớp kia là một lớp cụ thể) là IEnumerable là chỉ đọc và danh sách thì không.

Vì vậy, nếu bạn cần khả năng thực hiện các thay đổi vĩnh viễn dưới bất kỳ hình thức nào cho bộ sưu tập của mình (thêm & xóa), bạn sẽ cần Danh sách. Nếu bạn chỉ cần đọc, sắp xếp và/hoặc lọc bộ sưu tập của bạn, IEnumerable là đủ cho mục đích đó.

Vì vậy, trong ví dụ thực tế của bạn, nếu bạn muốn thêm bốn chuỗi tại một thời điểm, bạn cần Danh sách. Nhưng nếu bạn đang instantiating bộ sưu tập của bạn tất cả cùng một lúc, bạn có thể sử dụng IEnumerable.

IEnumerable firstFourLettersOfAlphabet = new[]{"a","b","c","d"}; 

Sau đó, bạn có thể sử dụng LINQ để lọc hoặc sắp xếp danh sách theo ý muốn.

+22

"IEnumerable là chỉ đọc và danh sách không." Cuối cùng, một câu trả lời cụ thể thực sự mang lại cho bạn một ý tưởng chung về sự khác biệt. Cảm ơn bạn rất nhiều :) – Robin

+1

Hoàn hảo !! Câu trả lời hay & đơn giản –

+1

Có một số điều thú vị khác mà bạn có thể thực hiện với IEnumerable mà bạn không thể thực hiện với Danh sách. Kiểm tra từ khóa lợi nhuận. https://www.kenneth-truyers.net/2016/05/12/yield-return-in-c/ – Kevin

10

Nhiều loại khác ngoài Danh sách triển khai IEnumerable chẳng hạn như ArrayList. Vì vậy, một lợi thế là bạn có thể vượt qua các loại bộ sưu tập khác nhau cho cùng một chức năng.

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