【C#】foreachで今のループが何回目なのか知りたい

foreachループ処理で今が何回めのループなのかを知りたい時があります。

ループの外でカウント用の変数を宣言して、ループするたびにカウントアップをしていくことで実現できますけど、もっとスマートにやりたいところです。

具体的にはカウント用に一時変数なんて使わずに、ループのIndexを取得したいわけです。

LINQのSelect拡張メソッド

LINQのSelect拡張メソッドを使えば、以下のようにループのインデックスを取得できました。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 配列
            List<string> list = new List<string> { "a", "i", "u", "e", "o" };

            // 値とインデックスのペアをループ処理
            foreach (var item in list.Select((value, index) => new { value, index }))
            {
                // 今、何回目かが分かる
                Console.WriteLine("value = {0}, index = {1}", item.value, item.index);
            }
        }
    }
}

C# 7.0 以降だと「値タプル」という機能でもっとスマートに書けるみたいです。