如何在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];