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ć
Odpowiedz
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.
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
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);) –
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