c# - sirve - matrices en programacion c++
¿Por qué las matrices en.net solo implementan IEnumerable y no IEnumerable<T>? (2)
Estaba implementando mi propia clase ArrayList y me sorprendí cuando me di cuenta de que
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
no funcionó ¿Cuál es la razón por la que las matrices no implementan IEnumerator en .NET?
¿Hay algún trabajo alrededor?
Gracias
Las matrices implementan IEnumerable<T>
, pero se hace como parte del conocimiento especial que la CLI tiene 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 implementación, esto se describe en la sección Remarks de la descripción general de la clase Array
.
Podrías agregar un elenco:
return ((IEnumerable<T>)_array).GetEnumerator();
Tenga en cuenta que la cobertura anterior de MSDN (pre docs.microsoft.com) cambió varias veces con diferentes versiones de .NET, verifique la sección de remarks .
Puede usar el método genérico IEnumerable<T> OfType<T>()
del espacio de nombres System.Linq, que extiende la interfaz IEnumerable. Filtrará todos los elementos cuyo tipo sea diferente de T y devolverá la IEnumerable<T> collection
. Si usa el operador de conversión (IEnumerable<T>)_array
, podría no ser seguro, porque System.Array
(y otros tipos no genéricos) almacena elementos del tipo System.Object
.