Подтвердить что ты не робот

Как получить доступ к индексу в объекте IEnumerable в С#?

У меня есть объект IEnumerable. Я хотел бы получить доступ, например, по индексу:

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

Возможно ли это?

4b9b3361

Ответ 1

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

Ответ 2

Во-первых, вы уверены, что это действительно IEnumerator, а не IEnumerable? Я сильно подозреваю, что это последнее.

Кроме того, вопрос не совсем ясен. У вас есть индекс, и вы хотите получить объект по этому индексу? Если да, и если у вас есть IEnumerable (не IEnumerator), вы можете сделать это:

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

Если вы хотите перечислить всю коллекцию, но также хотите иметь индекс для каждого элемента, тогда В.А. или ответы Nestor - это то, что вы хотите.

Ответ 3

В IEnumerator нет индекса. Используйте

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

вы можете сделать свой собственный индекс, если хотите:

int i=0;
foreach(var item in Model.Products)
{
    ... item...
    i++;
}

Ответ 4

foreach(var indexedProduct in Model.Products.Select((p, i)=> new {Product = p, Index = i})
{
   ...
   ...indexedProduct.Product...
   ...indexProduct.Index ...//this is what you need.
   ...
}

Ответ 5

Лучший способ получить индекс по индексу - связать свою перечислимую коллекцию с массивом с использованием Linq следующим образом:

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];