Yield return & using IDisposable

English Version

“Yield return” ist ein mächtiges und praktisches Statement, wenn man schnell und einfach eine iterierbare Liste erzeugen möchte, ohne erst großartig ein Array oder eine List anzulegen:

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

class Program
{
    static void Main()
    {
        var colors = Rainbow;

        Console.WriteLine("colors.GetType(): {0}", colors.GetType());
        Console.WriteLine();

        foreach (Color color in colors)
        {
            Console.WriteLine(color.Name);
        }

        Console.ReadLine();
    }

    static IEnumerable<Color> Rainbow
    {
        get
        {
            yield return (Color.Red);
            yield return (Color.Orange);
            yield return (Color.Yellow);
            yield return (Color.Green);
            yield return (Color.LightBlue);
            yield return (Color.Indigo);
            yield return (Color.Violet);
        }
    }
}
Red
Orange
Yellow
Green
LightBlue
Indigo
Violet

Der .NET Compiler erzeugt dann im Hintergrund die notwendigen IEnumerable- und IEnumerator-implementierenden Klassen und die State Machine und alles ist fein und übersichtlich.
Read more