J'ai un objet IEnumerable. J'aimerais accéder en fonction de l'index par exemple:
for(i=0; i<=Model.Products; i++)
{
???
}
Est-ce possible?
var myProducts = Models.Products.ToList();
for(i=0; i< myProducts.Count ; i++)
{
//myProducts[i];
}
Tout d’abord, êtes-vous sûr que c’est vraiment IEnumerator
et non IEnumerable
? Je soupçonne fortement que c'est en réalité le dernier.
De plus, la question n’est pas tout à fait claire. Avez-vous un index et vous voulez obtenir un objet à cet index? Si oui, et si vous avez une IEnumerable
(pas IEnumerator
), vous pouvez faire ceci:
using System.Linq;
...
var product = Model.Products.ElementAt(i);
Si vous souhaitez énumérer toute la collection, mais souhaitez également un index pour chaque élément, les réponses de V.A ou de Nestor sont ce que vous voulez.
Il n'y a pas d'index dans IEnumerator. Utilisation
foreach(var item in Model.Products)
{
...item...
}
vous pouvez créer votre propre index si vous voulez:
int i=0;
foreach(var item in Model.Products)
{
... item...
i++;
}
foreach(var indexedProduct in Model.Products.Select((p, i)=> new {Product = p, Index = i})
{
...
...indexedProduct.Product...
...indexProduct.Index ...//this is what you need.
...
}
Le meilleur moyen de récupérer un élément par index est de référencer votre collection énumérable avec un tableau utilisant Linq de la manière suivante:
using System.Linq;
...
class Model {
IEnumerable<Product> Products;
}
...
// Somewhere else in your solution,
// assume model is an instance of the Model class
// and that Products references a concrete generic collection
// of Product such as, for example, a List<Product>.
...
var item = model.Products.ToArray()[index];