considerar dos métodos de iterador con los mismos cuerpos:¿Hay alguna diferencia entre los métodos del iterador que devuelven IEnumerable <T> y IEnumerator <T>?
public static IEnumerable<int> It1() {
...
}
public static IEnumerator<int> It2() {
...
}
¿Hay alguna circunstancia en la que llamar It2
es diferente de llamar It1.GetEnumerator()
?
¿Hay alguna vez una buena razón para definir un iterador como IEnumerator<T>
sobre IEnumerable<T>
? El único en el que puedo pensar es cuando está implementando IEnumerable<T>.GetEnumerator()
.
EDITAR: Por métodos de iterador me refiero a los métodos que usan constructos yield return
y yield break
.
implementaciones sentido estricto de métodos no pueden ser iguales. –
Por supuesto que sí. public static IEnumerable It1() { yield return 1; } public static IEnumerator It2() { yield return 1; } –
Ahora, lo que el compilador los convierte en obviamente difiere; uno se convierte en una clase anónima que implementa IEnumerator y el otro en dos clases anónimas que implementan IEnumerable e IEnumerator . ¿Hay algún caso cuando los dos IEnumerators son diferentes? –