Select method (Sysmte.Linq namespace) has an overload to return the loop index.
With calling this overload, the index of the loop can be get without a temporary variable.
C# code
var array = new[] { "A", "B", "C" };
foreach (var item in array.Select((v, i) => new { v, i }))
{
Console.WriteLine("value = {0}, index = {1}", item.v, item.i);
}
Result
value = A, index = 0 value = B, index = 1 value = C, index = 2