2010-09-22 15 views
9

Jestem programistą VB.Net, rodzajem newbie w C#, Szukając w C# dokumentacji przeszedłem przez Iteratory i Generatory, nie mogłem w pełni zrozumieć użycia, Ja tam każdy, kto może wyjaśnić (w vb spostrzegawczy, jeśli to możliwe)Co to są Iteratory i Generatory C# i jak mogę je wykorzystać

+1

Iteratory są najczęściej używane do przeglądania list różnych typów. Iteratory nazywane są enumeratorami w .net. Kolejne pytanie dotyczące iteratorów: http://stackoverflow.com/questions/1227283/why-do-we-need-iterators-in-c – jgauffin

Odpowiedz

14

Typeratory to łatwy sposób na wygenerowanie sekwencji przedmiotów, bez konieczności samodzielnego wdrożenia IEnumerable<T>/IEnumerator<T>. Iterator to metoda zwracająca wartość IEnumerable<T>, którą można wyliczyć w pętli foreach.

Oto prosty przykład:

public IEnumerable<string> GetNames() 
{ 
    yield return "Joe"; 
    yield return "Jack"; 
    yield return "Jane"; 
} 

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

zauważy oświadczenia yield return: to stwierdzenie nie faktycznie powrót z metody, po prostu „push” do następnego elementu, kto czyta realizację.

Gdy kompilator napotyka blok iteratora, w rzeczywistości przepisuje go na automat stanów w klasie, która implementuje IEnumerable<T> i IEnumerator<T>. Każda instrukcja yield return w iteratorze odpowiada stanowi w tym automacie stanów.

Zobacz this article Jon Skeet po więcej informacji na temat iteratorów.

+0

Byłoby pomocne zobaczyć przykład, kiedy może zajść taka potrzeba. Twój prosty przykład może zostać zastąpiony tablicą ciągów znaków, jeśli celem jest wyliczenie "Joe" "Jack" i "Jane"? – MarkJ

+0

Tak, ten przykład nie jest zbyt użyteczny, możesz z łatwością użyć tablicy. Więcej przydatnych przykładów można znaleźć w artykule [Jon Skeet's series on Reimplementing Linq to Objects] (http://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx);) –

Powiązane problemy