我有一个IEnumerable对象。我想根据索引访问例如:如何访问C#中IEnumerable对象的索引?
for(i=0; i<=Model.Products; i++)
{
???
}
这可能吗?
我有一个IEnumerable对象。我想根据索引访问例如:如何访问C#中IEnumerable对象的索引?
for(i=0; i<=Model.Products; i++)
{
???
}
这可能吗?
var myProducts = Models.Products.ToList();
for(i=0; i< myProducts.Count ; i++)
{
//myProducts[i];
}
不应该是我
并且还要警惕.ToList()正在内存中创建一个新列表。那是值得的(所有的垃圾只是有一个指数?) – Nestor 2009-10-31 12:23:05
这是非常讨厌的。因此,如果有10,000种产品,他需要第五,你告诉他先加载所有10K内存,只是放弃9554,他不会需要什么? – 2009-11-16 21:16:55
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.
...
}
首先,你确定这是真的IEnumerator
而不是IEnumerable
?我强烈怀疑它实际上是后者。
此外,该问题并不完全清楚。你有一个索引,并且你想获得该索引的一个对象吗?如果是这样,如果你确实有一个IEnumerable
(不IEnumerator
),你可以这样做:如果你想枚举整个集合
using System.Linq;
...
var product = Model.Products.ElementAt(i);
,同时也希望为每个元素的索引,那么VA” s或Nestor的答案是你想要的。
通过索引检索项目的最好办法就是以这种方式使用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];
@Avram的'IEnumerator'是想获得一个完全合理的事情一个项目的索引。 – Servy 2014-06-02 14:33:19
@Servy IEnumerator的搭配IEnumerable的,需要添加的IEnumerable作为问题 – Avram 2014-06-02 14:43:07
@Avram号的一部分,你*不*需要。他可以自由地询问他想询问的任何一个人。他选择询问“IEnumerator”,这是一个非常好的问题。仅仅因为这不是你想要回答/已经回答的问题,并不意味着你应该改变这个问题。 – Servy 2014-06-02 14:45:14