Конечно.Существует перегрузка Enumerable.Select
, для которой требуется Func<TSource, int, TResult>
для проецирования элемента вместе с его индексом:
Например:
char[] letters = new[] { 'a', 'b', 'c' };
var enumerate = letters.Select((c, i) => new { Char = c, Index = i });
foreach (var result in enumerate) {
Console.WriteLine(
String.Format("Char = {0}, Index = {1}", result.Char, result.Index)
);
}
Вывод:
Char = a, Index = 0
Char = b, Index = 1
Char = c, Index = 2