หากคุณรู้ว่าคอลเล็กชันนั้นมีจำนวน IEnumerable แต่จำเป็นต้องติดตามจำนวนองค์ประกอบที่คุณประมวลผลจนถึงตอนนี้ (และเมื่อรวมทั้งหมดเมื่อคุณทำเสร็จแล้ว) คุณสามารถเพิ่มสองบรรทัดเป็นพื้นฐานสำหรับลูป:
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
}
คุณยังสามารถเพิ่มตัวแปรดัชนีแบบเพิ่มหน่วยลงใน foreach:
var i=0;
foreach(var elem in coll)
{
//do your thing, then...
i++;
}
หากคุณต้องการทำให้ลุคนี้ดูหรูหรายิ่งขึ้นคุณสามารถกำหนดวิธีการขยายหรือสองเพื่อ "ซ่อน" รายละเอียดเหล่านี้:
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()));