Saltar al contenido

No se puede aplicar la indexación con [] a una expresión de tipo ‘System.Collections.Generic.IEnumerable

Nuestros investigadores estrellas han agotado sus reservas de café, en su búsqueda todo el tiempo por la respuesta, hasta que Saúl halló la contestación en GitHub así que ahora la compartimos contigo.

Solución:

Porque no lo es.

La indexación está cubierta por IList. IEnumerable significa “Tengo algunos de los poderes de IList, pero no todos”.

Algunas colecciones (como una lista enlazada) no se pueden indexar de manera práctica. Pero se puede acceder a ellos elemento por elemento. IEnumerable está destinado a colecciones como esa. Tenga en cuenta que una colección puede implementar tanto IList como IEnumerable (y muchos otros). Generalmente solo encuentras IEnumerable como un parámetro de función, lo que significa que la función puede aceptar cualquier tipo de colección, porque todo lo que necesita es el modo de acceso más simple.

los IEnumerable interfaz no incluye un indexador, probablemente lo esté confundiendo con IList

Si el objeto es realmente un IList (p.ej List o un array T[]), intente hacer la referencia a él del tipo IList también.

De lo contrario, puede utilizar myEnumerable.ElementAt(index) que utiliza el método de extensión Enumerable.ElementAt. Esto debería funcionar para todos IEnumerables . Tenga en cuenta que a menos que el objeto (en tiempo de ejecución) implemente IListesto hará que todos los primeros index + 1 artículos a enumerar, y todos menos el último se descartan.

EDITAR: Como explicación, IEnumerable es simplemente una interfaz que representa “aquello que expone un enumerador”. Una implementación concreta bien puede ser algún tipo de lista en memoria que lo hace permitir el acceso rápido por índice, o puede que no. Por ejemplo, podría ser una colección que no puede satisfacer de manera eficiente dicha consulta, como una lista vinculada (como lo menciona James Curran). incluso puede ser ningún tipo de estructura de datos en memoria en absoluto, como un iterador, donde los elementos se generan (‘rendidos’) a pedido, o por un enumerador que obtiene los elementos de alguna fuente de datos remota. Porque IEnumerable Debe admitir todos estos casos, los indexadores están excluidos de su definición.

Puedes usar Listar para convertir a una lista. Por ejemplo,

SomeItems.ToList()[1]

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *