Bildiğiniz tek şey koleksiyonun IEnumerable olduğunu, ancak şu ana kadar kaç öğeyi işlediğinizi (ve böylece işiniz bittiğinde toplamı) izlemeniz gerekiyorsa, temel bir döngüye birkaç satır ekleyebilirsiniz:
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
}
Ayrıca, bir foreach öğesine artan bir dizin değişkeni ekleyebilirsiniz:
var i=0;
foreach(var elem in coll)
{
//do your thing, then...
i++;
}
Bunun daha zarif görünmesini istiyorsanız, bu ayrıntıları "gizlemek" için bir veya iki uzantı tanımlayabilirsiniz:
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()));