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 以降だと「値タプル」という機能でもっとスマートに書けるみたいです。