od Kubees » 29. 6. 2010 12:42
Ja tomu rozumim tak, ze foreach spousti metodu GetEnumerator() toho vytvorenyho var list, coz je nejaka kolekce ktera to umoznuje.
A prochazi to tim zpusobem, ze pri kazdym pruchodu to vrati jeden yield return z tech returnu ktere jsou v tele GetEnumerator() - tzn. ze se provadi prikazy v tele toho GetEnumerator() nez se narazi na yield return, ktery byl vybran do te kolekce (napriklad where x>1 ho mohlo vyradit) atd. dokud se neprojde cela kolekce=vsechny returny.
Je dulezite si uvedomit, ze telo GetEnumerator a foreach bezi paralelne - GetEnumerator vraci kolekci, ale kazdy prvek zvlast, az kdyz se ho na to foreach zepta, mezitim ceka za poslednim returnem, ktery vracel.
Snad to neni moc zmatene.
Ja tomu rozumim tak, ze foreach spousti metodu GetEnumerator() toho vytvorenyho var list, coz je nejaka kolekce ktera to umoznuje.
A prochazi to tim zpusobem, ze pri kazdym pruchodu to vrati jeden yield return z tech returnu ktere jsou v tele GetEnumerator() - tzn. ze se provadi prikazy v tele toho GetEnumerator() nez se narazi na yield return, ktery byl vybran do te kolekce (napriklad where x>1 ho mohlo vyradit) atd. dokud se neprojde cela kolekce=vsechny returny.
Je dulezite si uvedomit, ze telo GetEnumerator a foreach bezi paralelne - GetEnumerator vraci kolekci, ale kazdy prvek zvlast, az kdyz se ho na to foreach zepta, mezitim ceka za poslednim returnem, ktery vracel.
Snad to neni moc zmatene. :)