Considere el siguiente código, el primero demuestra que la "limpieza" se ejecuta cuando terminamos de iterar sobre el IEnumerable de cadenas. El segundo pase es lo que me está causando dolor. Necesito poder abandonar IEnumerable antes de llegar al final y luego ejecutar el código de limpieza. Pero si ejecuta esto, verá que en el segundo paso la limpieza nunca se dispara.¿Cómo puedo abandonar un IEnumerator sin iterar hasta el final?
¿Cuál es la forma preferida de abandonar un IEnumerable como este?
static void Main(string[] args)
{
// first pass
foreach (String color in readColors())
Console.WriteLine(color);
// second pass
IEnumerator<string> reader = readColors().GetEnumerator();
if (reader.MoveNext())
{
Console.WriteLine(reader.Current);
reader.Dispose();
}
}
static IEnumerable<string> readColors()
{
string[] colors = { "red", "green", "blue" };
for (int i = 0; i < colors.Length; i++)
yield return colors[i];
Console.WriteLine("Cleanup goes here");
}
me pueden faltar algo, o que su ejemplo es demasiado simplista ... pero lo que la limpieza Qué Ened a ejecutar al final de la enumeración en readColors? Parece que el GC debería ser capaz de manejar las cosas solo por sí mismo. –
Si tiene una colección personalizada, también puede implementar la IDisposable?! – serhio