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

Представление работало бы лучше в этом случае?

CREATE VIEW vwTable
as  
SELECT  
    col1  
    , col2  
    , col3  
    , col..  
    , col53  
FROM table
30
задан Alexander Derck 24 August 2016 в 07:48
поделиться

4 ответа

var myProducts = Models.Products.ToList();
for(i=0; i< myProducts.Count ; i++)
{
      //myProducts[i];
}
21
ответ дан 27 November 2019 в 22:55
поделиться

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

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

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

int i=0;
foreach(var item in Model.Products)
{
    ... item...
    i++;
}
26
ответ дан 27 November 2019 в 22:55
поделиться

Прежде всего, вы уверены, что это действительно IEnumerator а не IEnumerable ? Я сильно подозреваю, что на самом деле последнее.

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

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

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

111
ответ дан 27 November 2019 в 22:55
поделиться
foreach(var indexedProduct in Model.Products.Select((p, i)=> new {Product = p, Index = i})
{
   ...
   ...indexedProduct.Product...
   ...indexProduct.Index ...//this is what you need.
   ...
}
9
ответ дан 27 November 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: