Is there some rare language construct I haven\'t encountered (like the few I\'ve learned recently, some on Stack Overflow) in C# to get a value representing the current iter
Just add your own index. Keep it simple.
int i = 0; foreach (var item in Collection) { item.index = i; ++i; }