यदि आप सभी जानते हैं कि संग्रह एक 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()));