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

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

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

这可能吗?

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

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

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

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

如果你想要枚举整个集合,但又想拥有每个元素的索引,那么VA或者Nestor的答案就是你想要的。

IEnumerator中没有索引。 使用

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

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

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

通过索引检索项目的最佳方法是使用Linq以这种方式使用数组引用您的可枚举集合:

 using System.Linq; ... class Model { IEnumerable 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. ... var item = model.Products.ToArray()[index];