Comment accéder à l'index dans l'objet IEnumerable en C#?

j'ai un objet innombrables. Je voudrais l'accès sur la base de l'indice par exemple:

for(i=0; i<=Model.Products; i++)
{
      ???
}

Est-ce possible?

26
demandé sur Alexander Derck 2009-10-31 15:13:50

5 réponses

var myProducts = Models.Products.ToList();
for(i=0; i< myProducts.Count ; i++)
{
      //myProducts[i];
}
18
répondu Graviton 2009-10-31 15:07:31

tout d'Abord, êtes-vous sûr que c'est vraiment IEnumerator et non IEnumerable? Je soupçonne fortement que c'est en fait le dernier.

IEnumerable (pas IEnumerator), vous pouvez faire ceci:

using System.Linq;
...
var product = Model.Products.ElementAt(i);

si vous voulez énumérer toute la collection, mais aussi avoir un index pour chaque élément, alors les réponses de V. A. ou de Nestor sont ce que vous vouloir.

93
répondu Pavel Minaev 2009-11-16 21:20:58
foreach(var item in Model.Products)
{
   ...item...
}

vous pouvez faire votre propre index si vous voulez:

int i=0;
foreach(var item in Model.Products)
{
    ... item...
    i++;
}
26
répondu Nestor 2009-10-31 12:16:51
foreach(var indexedProduct in Model.Products.Select((p, i)=> new {Product = p, Index = i})
{
   ...
   ...indexedProduct.Product...
   ...indexProduct.Index ...//this is what you need.
   ...
}
8
répondu V.A. 2009-11-16 21:14:47

la meilleure façon de récupérer un élément par index est de référencer votre collection énumérable avec un tableau utilisant Linq de cette façon:

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];
0
répondu bert 2017-07-12 18:52:25