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.