6.7 Mit Finally-Blöcken und Iteratoren klarkommen

Problem

Ihr Iterator hat einen try/finally-Block, und Ihnen fällt auf, dass der finally-Block nicht wie erwartet ausgeführt wird.

Lösung

Sehen wir uns an, was passiert, wenn Sie den Iterationscode im GetEnumerator-Iterator in einen try-Block packen und den finally-Block auf diesen try-Block folgen lassen:

public class StringSet
{
    private List<string> _items = new List<string>(  );

    public void AddString(string str)
    {
        _items.Add(str);
    }

    public IEnumerator GetEnumerator(  )
    {
        try
        {
            for (int index = 0; index < _items.Count; index++)
            {
                yield return (_items[index]);
            }
        }
        finally
        {
            Console.WriteLine("Im finally-Block des Iterators");
        }
    }
}

Der foreach-Code, der diesen Iterator aufruft, sieht so aus:

// ...

Get C# Kochbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.