IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tayson
Člen
Avatar
Tayson:16.9.2016 20:27

Ahojte chcem opytat ked mam takyto kod:

IEnumerable<string> elements = MyIteratorMethod();
foreach (string element in elements)
{

}

Tak co sa mi ulozi do elements este pre vykonanim foreach? Alebo teda aka je postupnost vykonavania tohto programu ? Chcem sa este opytat ze ak mam vlastnu kolekciu ktora implementuje IEnumerable tak mam tam metodu GetEnumerator... znamena to ze mozem si vytvorit triedu vlastnu kde implementujem moveNext, current a tak dalej alebo ju nemusim implementovat a pouzijem v getenumerator metode yield? Dakujem

 
Odpovědět
16.9.2016 20:27
Avatar
Marian Benčat:16.9.2016 23:38

Pro pochopení ti stačí následující vědomosti:

  1. Běžná metoda si nedrží žádnou informaci o sobě po skončení, pokud do ni napíšeš:
return a;
return b;
return c;

a zavoláš ji 3x, trak pokaždé vártí a

  1. Metoda co vrací pomocí yodlování (yield) si pamatuje svuj state (vi, kde skoncila a pri dalsim zavolani tam muze navazat)

yield a;
yield b;
yield c;

ti při každém volání vrátí to další. Takto ji lze už automaticky použít jako IEnumerable kolekci (lze ji navat do foreache)

  1. Pokud chceš implementovat nějakou kolekci, co implementuje to IEnumerable, defakto jen implementuješ GetEnumerator() který má za úkol, vždy vracet další prvek.. Zde lze využít toho, že se pamatuje stav, ve kteérm se skončilo.. uvnitř toho GetEnumerator() máš tedy ve většině případů jinou iteraci skrze všechny prvky, kde v každé iteraci (v každém kole) yieldnes prvek...

Tedy většinou implementace GetEnumerator() je ve stylu:
foreach(a in vnitrniPole) {
yield a;
}

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
16.9.2016 23:38
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.