Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
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
Redaktor
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í
+1 bodů
Řešení problému
Nahoru Odpovědět 16.9.2016 23:38
In Smalltalk, everything is an object, In Clojure, everything is a list, In Javascript, everything is fucking mistake
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.