2010-10-28 50 views
5

Tôi không hiểu rõ việc sử dụng IEnumerator từ Bộ sưu tập C# là gì. Nó được sử dụng cho cái gì và tại sao nó nên được sử dụng?Mục đích của IEnumerator

Tôi đã thử tìm kiếm trực tuyến tại http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx nhưng bài viết đó không có ý nghĩa nhiều. Lý do tôi hỏi là trong Unity3d Game Engine, nó được sử dụng cùng với chức năng lợi nhuận. Tôi đang cố gắng hiểu được lý do của việc sử dụng IEnumerator.

Trả lời

10

Giao diện IEnumerator, khi được thực hiện bởi một lớp cho phép nó được lặp lại thông qua việc sử dụng cú pháp foreach tích hợp.

Trong lớp cần được lặp lại cho giao diện IEnumerator xác định chữ ký phương thức cho hàm GetEnumerator kiểm soát vòng lặp thông qua đối tượng.

public IEnumerator<OrderLine> GetEnumerator() 
    { 
     for (int i=0;i<maxItems;i++) 
     { 
      yield return item[i]; 
     } 
    } 

Như bạn có thể thấy trong ví dụ này, mang tuyên bố cho phép bạn quay trở lại kiểm soát cho người gọi mà không làm mất vị trí của nó trong kiểu liệt kê. Kiểm soát sẽ được chuyển trở lại dòng sau báo cáo lợi nhuận khi người gọi chạm vào gia số tiếp theo của vòng lặp foreach.

+0

thường là người muốn so sánh nghiêm ngặt: 'cho (int i = 0; i Vlad

+0

Ooops. Đã quá vội vã. Đã sửa. – JohnFx

+0

Không phải IEnumerator cũng là giao diện cơ sở được sử dụng bởi các phương thức mở rộng được định nghĩa trong LINQ – David

1

Bạn hiếm khi sử dụng IEnumerator một cách rõ ràng, nhưng có rất nhiều phương pháp mở rộng hoạt động với nó, cũng như foreach. Tất cả các bộ sưu tập thực hiện nó, và nó là một ví dụ của mẫu Iterator.

1

Nó khá đơn giản chỉ là một giao diện cho phép các đối tượng thực hiện các thao tác để dễ dàng lặp qua bộ sưu tập. Bạn có thể sử dụng nó để tạo các đối tượng lặp qua một bộ sưu tập tùy chỉnh với một cấu trúc foreach hoặc cú pháp tương tự.