2010-03-25 13 views
7

Có một nguồn tài nguyên tốt ngoài kia giải thích khái niệm về điều tra viên và điều tra viên không? Đặc biệt là một ví dụ vững chắc về lý do tại sao bạn muốn tự mình thực hiện IEnumerable và cách bạn sẽ sử dụng nó một cách hiệu quả?Tôi có thể tìm hiểu các điểm trong và ngoài của các điều tra viên trong C# ở đâu?

Tôi thỉnh thoảng đi qua yield và tôi đang cố gắng hiểu rõ hơn về điều đó.

+0

@slc chờ câu trả lời của Jon Skeet .... –

+0

@Pandiya Chendur:: | – leppie

+0

@leppie nghĩa là gì? –

Trả lời

8

Ví dụ đơn giản nhất:

IEnumerable<string> GetNames() 
{ 
    yield return "Bob"; 
    yield return "Bob's uncle"; 
    yield return "Alice"; 
    yield return "Stacy"; 
    yield return "Stacy's mom"; 
} 

Cách sử dụng:

foreach (var name in GetNames()) 
{ 
    Console.WriteLine(name); 
} 

Để nhìn thấy nó trong hành động, đặt một breakpoint debugger trên mỗi dòng trong phương pháp GetNames.

+0

Điều đó có ý nghĩa, nhưng bạn có thể giải thích phương thức Count() hoạt động như thế nào? Liệu nó có buộc các điều tra viên phải chạy qua tất cả các kết quả để đếm chúng? Ngoài ra, tại sao một số mã có 'phá vỡ lợi nhuận'? – NibblyPig

+0

'break sản lượng' về cơ bản là nói 'dừng lại, không còn yếu tố'. Và có, 'Count()' (không phải 'Count' hoặc' Length') sẽ lặp lại toàn bộ bộ sưu tập nếu nó không có phím tắt (ví dụ 'Count' và' Length'). – leppie

+0

cảm ơn leppie! nó bắt đầu có ý nghĩa bây giờ, nhưng ý của bạn là gì? – NibblyPig

0

Mẫu tốt có thể được tìm thấy tại trang MSDN cho IEnumerable.

+1

Bạn có thể muốn cung cấp liên kết tiếng Anh :) – leppie

+0

tôi nghĩ tôi đã chuyển văn hóa của mình thành vi-chúng tôi ... Thx! – Andrey

+0

Thật không may là mẫu không bao gồm sản lượng, đó có lẽ là nguồn gây nhầm lẫn thực sự. –

1

Ví dụ và tham chiếu tốt nhất tôi tìm thấy thực sự là trong các cuốn sách C# trong Depth từ Jon Skeet toàn năng. Nó không phải là quá tốn kém và nó có giá trị nó cho tất cả mọi thứ bạn sẽ tìm hiểu về C#.

+0

Lưu ý rằng đây là chương 6 trong ấn bản đầu tiên, vốn từng là (và có lẽ vẫn là) một trong các chương mẫu miễn phí. –

+0

Có một liên kết: http://www.manning-source.com/books/skeet/Chapter6sample.pdf –

+0

@Martinho: Thật không may là liên kết trực tiếp không hoạt động. Bạn cần phải đi qua http://manning.com/skeet đầu tiên - Tôi nghi ngờ nó đang kiểm tra referrer. Nhưng có, nó vẫn miễn phí :) –

3

Một cuốn sách khác mà tôi thấy khá hữu ích khi tôi đang học về IEnumerable và IEnumerator là cuốn sách Pro C# 2008 của Troelsen. Nó giải thích những gì các giao diện chứa và cách xây dựng các trình lặp với từ khóa "lợi nhuận".

Hy vọng trợ giúp này.

2

Dưới đây là một vài tài nguyên khác sau khi bạn đã nắm được kiến ​​thức cơ bản.

Wes có một bài viết tuyệt vời về các đặc điểm hoạt động của vòng lặp:

http://blogs.msdn.com/wesdyer/archive/2007/03/23/all-about-iterators.aspx

Nếu bạn có thắc mắc về việc tại sao có rất nhiều hạn chế lạ vào những gì bạn có thể làm trong một khối iterator, đây là bảy của tôi phần loạt bài về những gì thúc đẩy các quy tắc bất thường:

http://blogs.msdn.com/ericlippert/archive/tags/Iterators/default.aspx

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