¿Por qué las matrices en .NET sólo se implementan IEnumerable y no IEnumerable ?
-
03-10-2019 - |
Pregunta
Me estaba poniendo en práctica mi propia clase ArrayList y quedé sorprendido cuando me di cuenta de que
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
no funcionaba. ¿Cuál es la razón de arrays no implementan IEnumerator en .NET?
¿Hay alguna solución alternativa?
Gracias
Solución
Las matrices hacen aplicar IEnumerable<T>
, pero se hace como parte de los conocimientos especiales tiene la CLI para las matrices. Esto funciona como si fuera una implementación explícita (pero no lo es: se realiza en tiempo de ejecución). Muchas herramientas no mostrarán esta aplicación, esto se describe en el Comentarios sección de la general de la clase Array
.
Se podría añadir un reparto:
return ((IEnumerable<T>)_array).GetEnumerator();
la cobertura Nota, mayores de MSDN (pre docs.microsoft.com) de esta cambiado un par de veces con diferentes versiones de .NET, de verificación de la sección de observaciones .
Otros consejos
Puede utilizar el método genérico IEnumerable<T> OfType<T>()
de System.Linq espacio de nombres, que se extiende interfaz IEnumerable. Se filtrará todos los elementos que tipo es diferente de T y IEnumerable<T> collection
retorno. Si utiliza operador de conversión (IEnumerable<T>)_array
, podría no ser seguro, porque System.Array
(y otros tipos no genéricos) tiendas de artículos de tipo System.Object
.