যদি আপনি সমস্ত কিছু জানেন যে সংগ্রহটি একটি আইনুমেয়রিয়াল তবে আপনার এখন পর্যন্ত কতগুলি উপাদান প্রক্রিয়া করা হয়েছে তার ট্র্যাক রাখা প্রয়োজন (এবং এভাবে আপনি যখন শেষ করেছেন মোট), আপনি লুপের জন্য একটি মৌলিকটিতে কয়েকটি লাইন যুক্ত করতে পারেন:
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()));