2009-10-31 53 views
25

我有一個IEnumerable對象。我想根據索引訪問例如:如何訪問C#中IEnumerable對象的索引?

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

這可能嗎?

+0

@Avram的'IEnumerator'是想獲得一個完全合理的事情一個項目的索引。 – Servy 2014-06-02 14:33:19

+0

@Servy IEnumerator的搭配IEnumerable的,需要添加的IEnumerable作爲問題 – Avram 2014-06-02 14:43:07

+0

@Avram號的一部分,你*不*需要。他可以自由地詢問他想詢問的任何一個人。他選擇詢問「IEnumerator」,這是一個非常好的問題。僅僅因爲這不是你想要回答/已經回答的問題,並不意味着你應該改變這個問題。 – Servy 2014-06-02 14:45:14

回答

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

不應該是我 2009-10-31 12:19:17

+12

並且還要警惕.ToList()正在內存中創建一個新列表。那是值得的(所有的垃圾只是有一個指數?) – Nestor 2009-10-31 12:23:05

+2

這是非常討厭的。因此,如果有10,000種產品,他需要第五,你告訴他先加載所有10K內存,只是放棄9554,他不會需要什麼? – 2009-11-16 21:16:55

25

IEnumerator中沒有索引。使用

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

你可以讓你自己的索引,如果你想:

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

首先,你確定這是真的IEnumerator而不是IEnumerable?我強烈懷疑它實際上是後者。

此外,該問題並不完全清楚。你有一個索引,並且你想獲得該索引的一個對象嗎?如果是這樣,如果你確實有一個IEnumerable(不IEnumerator),你可以這樣做:如果你想枚舉整個集合

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

,同時也希望爲每個元素的索引,那麼VA」 s或Nestor的答案是你想要的。

0

通過索引檢索項目的最好辦法就是以這種方式使用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];