Якщо все, що ви знаєте, це те, що колекція є 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
}
Ви також можете додати до індексу нарощену змінну індексу:
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()));