dedlfix: yield return

Beitrag lesen

Tach!

Kann jemand mir kurz erläutern, was da vor sich geht? Warum werden A und B erst in foreach-Schleife ausgegeben und nicht beim Aufruf der Methode? die Methode gibt ja eine int-Liset zurück, in der nur 1 und 2 stehen. yield return finde ich sowieso etwas verwirrend.

Das yield ist der Schlüssel zum Verständnis. Die Methode Foo gibt keine Liste zurück, sondern etwas, über das man iterieren kann: IEnumerable und nicht IList oder List oder Array. Das yield veranlasst nun, dass ein so genannter Generator erstellt wird. Das IEnumerable hat eine Methode GetEnumerator(). Erst wenn von diesem das MoveNext() aufgerufen wird, wird die Generator-Methode ausgeführt. Dabei wird der Code bis zum ersten yield ausgeführt und das zurückgegeben, was hinter dem yield steht. Die Generator-Methode pausiert nun, bis MoveNext() erneut aufgerufen wird. Dann setzt sie nach dem yield fort bis zum nächsten oder bis zum Ende, je nachdem was zuerst erreicht wird. (Ein foreach bedient sich intern auch nur der Methoden vom Enumerator.)

dedlfix.