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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top