wake-up-neo.com

Zugriff auf den Index im IEnumerable-Objekt in C #

Ich habe ein IEnumerable-Objekt. Ich möchte zum Beispiel auf den Index zugreifen:

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

Ist das möglich?

26
dcpartners
var myProducts = Models.Products.ToList();
for(i=0; i< myProducts.Count ; i++)
{
      //myProducts[i];
}
21
Graviton

Sind Sie sicher, dass es wirklich IEnumerator und nicht IEnumerable ist? Ich vermute stark, dass es letztere ist.

Darüber hinaus ist die Frage nicht ganz klar. Haben Sie einen Index und möchten ein Objekt an diesem Index abrufen? Wenn ja, und wenn Sie tatsächlich eine IEnumerable (nicht IEnumerator) haben, können Sie Folgendes tun:

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

Wenn Sie die gesamte Auflistung auflisten möchten, aber auch einen Index für jedes Element haben möchten, sind die Antworten von V. A. oder Nestor genau das, was Sie möchten. 

97
Pavel Minaev

Es gibt keinen Index in IEnumerator. Benutzen 

foreach(var item in Model.Products)
{
   ...item...
}

sie können Ihren eigenen Index erstellen, wenn Sie möchten:

int i=0;
foreach(var item in Model.Products)
{
    ... item...
    i++;
}
26
Nestor
foreach(var indexedProduct in Model.Products.Select((p, i)=> new {Product = p, Index = i})
{
   ...
   ...indexedProduct.Product...
   ...indexProduct.Index ...//this is what you need.
   ...
}
8
V.A.

Der beste Weg, ein Element über den Index abzurufen, besteht darin, auf Ihre aufzählbare Auflistung mit einem Array mithilfe von Linq zu verweisen:

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
bert