Cuando implemente IList<T>
, encuentro que estoy obligado a definir dos métodosGetEnumerator
. Uno devuelve un valor que es del tipo IEnumerator
, mientras que el otro devuelve IEnumerator<T>
.¿Por qué la implementación de 'IList <T>' requiere la definición de dos métodos 'GetEnumerator'?
Estoy un poco confundido acerca de la diferencia entre estos dos métodos GetEnumerator
. Si bien los tipos de devolución son obviamente diferentes, ¿no tienen esencialmente los mismos datos?
Además, ¿por qué ambas versiones de GetEnumerator
pueden existir como métodos cuando difieren solo por tipo de devolución? Esto parece violar la regla en C# que especifica que los métodos sobrecargados no pueden diferir solo por tipo de devolución.
No del todo cierto, el argumento genérico no es suficiente: uno se implementa explícitamente, el otro no. –
Difícilmente podría llamar el uso no genérico de IEnumerator en una magia de bucle foreach. Simplemente intenta lanzar desde el objeto al tipo que especifique. Si falla, obtendrás una excepción. –
Aceptado para explicar el problema de compatibilidad hacia atrás. Gracias. – MyNameIsJob