我有一個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