2010-08-27 19 views
15

Tôi đã tự hỏi, khi nào chính xác tôi có thể sử dụng vòng lặp foreach? Tôi có phải triển khai IEnumerable không?Có phải IEnumerable được yêu cầu sử dụng vòng lặp foreach không?

+6

[Câu trả lời đầu tiên] (http://msdn.microsoft.com/fr-fr/library/ttw7t8t6%28VS.80%29.aspx) tại Google. – pascal

+0

http://msdn.microsoft.com/en-us/library/9yb8xew9(VS.80).aspx – Dave

+12

Bạn có thể sử dụng chúng vào các ngày Thứ Ba và Thứ Năm và trong ngày cuối tuần thứ năm của tháng theo lịch. –

Trả lời

2

Bạn có thể foreach dù bất kỳ đối tượng mà thực hiện IEnumerable hoặc IEnumberable<T>

37

Không cần để thực hiện các giao diện IEnumerable để sử dụng câu lệnh foreach. Dưới đây là một trích dẫn từ MSDN (http://msdn.microsoft.com/en-us/library/9yb8xew9.aspx):

Trong C#, nó không phải là hoàn toàn cần thiết cho một lớp bộ sưu tập để kế thừa từ IEnumerable và IEnumerator để để tương thích với foreach. Miễn là vì lớp học có yêu cầu GetEnumerator, MoveNext, Đặt lại và Thành viên hiện tại, nó sẽ hoạt động với foreach. Bỏ qua các giao diện có lợi thế của việc cho phép bạn xác định loại trả về Hiện tại là cụ thể hơn đối tượng, trong đó cung cấp loại an toàn.

+0

Giống như thế này vì nó chính xác nói rằng 'IEnumerable' không được yêu cầu. Nó chắc chắn làm cho cuộc sống dễ dàng hơn, mặc dù. –

+4

Điều đó thực sự thú vị và tôi không biết điều đó. Nhưng tôi cho rằng đây là chủ yếu để hỗ trợ an toàn loại trong .NET 1.0. Tôi muốn nói cách tốt nhất để đảm bảo an toàn loại hiện nay là sử dụng phiên bản chung của IEnumerable. –

+0

+1 Học một cái gì đó mới mỗi ngày. – BoltClock

2

Hãy tự hỏi mình - bạn có thực sự cần một vòng lặp truy cập

Nguyên tắc hàng đầu tôi sử dụng được xác định nếu tôi di chuyển dữ liệu giữa hai container được lập chỉ mục, nơi tôi thực sự làm cần một giá trị chỉ mục để giải quyết đích, hoặc nói chung, 'tôi có cần số chỉ mục cho mỗi mục tôi đang xử lý trong vòng lặp' không? Trong những trường hợp đó, tôi sử dụng vòng lặp for, trong hầu hết các trường hợp khác (nơi foreach có thể xử lý container, như đã nói ở trên là khá nhiều container) - lý do khá đơn giản, có vẻ khá ngu ngốc khi sử dụng foreach và sau đó phải đi đến những rắc rối của tự duy trì một truy cập vòng lặp.

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