Jika yang Anda tahu adalah bahwa koleksi tersebut adalah jumlah IEn, tetapi perlu melacak berapa banyak elemen yang telah Anda proses sejauh ini (dan dengan demikian total ketika Anda selesai), Anda dapat menambahkan beberapa baris ke dasar untuk loop:
var coll = GetMyCollectionAsAnIEnumerable();
var idx = 0;
for(var e = coll.GetEnumerator(); e.MoveNext(); idx++)
{
var elem = e.Current;
//use elem and idx as you please
}
Anda juga bisa menambahkan variabel indeks yang ditambahkan ke foreach:
var i=0;
foreach(var elem in coll)
{
//do your thing, then...
i++;
}
Jika Anda ingin membuat ini terlihat lebih elegan, Anda dapat menentukan satu atau dua metode ekstensi untuk "menyembunyikan" detail ini:
public static void ForEach<T>(this IEnumerable<T> input, Action<T> action)
{
foreach(T elem in input)
action(elem);
}
public static void ForEach<T>(this IEnumerable<T> input, Action<T, int> action)
{
var idx = 0;
foreach(T elem in input)
action(elem, idx++); //post-increment happens after parameter-passing
}
//usage of the index-supporting method
coll.ForEach((e, i)=>Console.WriteLine("Element " + (i+1) + ": " + e.ToString()));