Jörg Reinholz: yield return

Beitrag lesen

Moin!

danke. Die Ausgabe CA1B2 ist schon richtig. Man könnte aber auch die Ausgabe ABC12 vermuten. Das ist ja auch die eigentliche Frage. Warum verhält sich "yield return" so?

yield return verhält sich im Zusammenhang eigentlich gar nicht

Ich habe mal eben mono installiert unter Linux mit folgendem probiert:

using System;
using System.Collections;
using System.Collections.Generic;

public class Program
{

    static void Main(string[] args)
    {
        var items = Foo();
        Console.Write("Ausgabe der Daten in items:\r\n");
        var count=0;
        foreach (var item in items)
        {
            count ++;
            Console.Write("count:");
            Console.Write(count);
            Console.Write("::");
            Console.Write(item);
            Console.Write("\r\n");
        }
    }

    static IEnumerable<int> Foo()
    {
        Console.Write("Erster Wert (1) wird zu Foo hinzugefügt\r\n");
        yield return 1;
        Console.Write("Zweiter Wert (2) wird zu Foo hinzugefügt\r\n");
        yield return 2;
    }
}

und dann:

fastix@trainer:/tmp$ mcs test.mono
fastix@trainer:/tmp$ mono test.exe 
Ausgabe der Daten in items:
Erster Wert (1) wird zu Foo hinzugefügt
count:1::1
Zweiter Wert (2) wird zu Foo hinzugefügt
count:2::2

Da sieht so aus als würde static IEnumerable<int> Foo() bei jedem Zugriff aufgerufen. Ein Horror! Das Verhalten könnte aber in der IEnumerable-Schnittstelle begründet sein.

Jörg Reinholz