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);
コレクション全体を列挙したいが、各要素にインデックスを付けたい場合は、V.A。または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<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];