Los iteradores son una nueva característica en C# 2.0. Un iterador es un método, descriptor de acceso get u operador que proporciona compatibilidad con una iteración foreach en una clase o estructura sin tener que implementar toda la interfaz IEnumerable. En su lugar, se proporciona sólo un iterador, que simplemente recorre las estructuras de datos de la clase. Cuando el compilador detecte el iterador, generará automáticamente los métodos Current, MoveNext y Dispose de la interfaz IEnumerable o IEnumerable<T>.
Información general sobre los iteradores
-
Un iterador es una sección de código que devuelve una secuencia ordenada de valores del mismo tipo.
-
Un iterador se puede utilizar como el cuerpo de un método, operador o descriptor de acceso get.
-
El código del iterador utiliza la instrucción yield return para devolver a su vez cada elemento. yield break finaliza la iteración. Para obtener más información, vea yield (Referencia de C#).
-
Se pueden implementar varios iteradores en una clase. Cada iterador debe tener un nombre único como cualquier nombre de clase y se puede invocar mediante código de cliente en una instrucción foreach de la manera siguiente: foreach(int x in SampleClass.Iterator2){}
-
El tipo de valor devuelto de un iterador debe ser IEnumerable, IEnumerator, IEnumerable<T> o IEnumerator.
La palabra clave yield se utiliza para especificar el valor o valores devueltos. Cuando se llega a la instrucción yield return, se almacena la ubicación actual. La ejecución se reinicia desde esta ubicación la próxima vez que se llame al iterador.
Los iteradores son especialmente útiles con las clases de colección, ya que proporcionan una manera fácil de recorrer en iteración las estructuras de datos no triviales, por ejemplo, los árboles binarios.
Secciones relacionadas
Para obtener más información:
Ejemplo
En este ejemplo, la clase DaysOfTheWeek es una clase de colección simple que almacena los días de la semana como cadenas. Después de cada iteración de un bucle foreach, se devuelve la cadena siguiente en la colección.
public class DaysOfTheWeek : System.Collections.IEnumerable
{
string[] m_Days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
public System.Collections.IEnumerator GetEnumerator()
{
for (int i = 0; i < m_Days.Length; i++)
{
yield return m_Days[i];
}
}
}
class TestDaysOfTheWeek
{
static void Main()
{
// Create an instance of the collection class
DaysOfTheWeek week = new DaysOfTheWeek();
// Iterate with foreach
foreach (string day in week)
{
System.Console.Write(day + " ");
}
}
}
Resultado
Sun Mon Tue Wed Thr Fri Sat
Especificación del lenguaje C#
Vea también