如何在C#中访问IEnumerable对象中的索引?

dcp*_*ers 30 c# ienumerable

我有一个IEnumerable对象.我想基于索引访问例如:

for(i=0; i<=Model.Products; i++)
{
      ???
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Pav*_*aev 111

首先,你确定它真的IEnumerator不是IEnumerable吗?我强烈怀疑它实际上是后者.

此外,问题并不完全清楚.你有一个索引,并且你想在该索引处获得一个对象吗?如果是这样,如果你确实有IEnumerable(不IEnumerator),你可以这样做:

using System.Linq;
...
var product = Model.Products.ElementAt(i);
Run Code Online (Sandbox Code Playgroud)

如果你想枚举整个集合,但也希望每个元素都有一个索引,那么VA或者Nestor的答案就是你想要的.


Nes*_*tor 26

IEnumerator中没有索引.使用

foreach(var item in Model.Products)
{
   ...item...
}
Run Code Online (Sandbox Code Playgroud)

你可以根据需要制作自己的索引:

int i=0;
foreach(var item in Model.Products)
{
    ... item...
    i++;
}
Run Code Online (Sandbox Code Playgroud)


Gra*_*ton 21

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

  • 并且还要注意.ToList()正在内存中创建一个新列表.这是否值得(所有浪费只是为了有一个索引?) (12认同)
  • 那太讨厌了.因此,如果有10,000个产品,并且他需要第5个,那么你告诉他先将所有10k加载到内存中,只是为了丢弃他不需要的9,554个? (3认同)

小智 9

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