C# - foreach ループで インデックス を取得する

foreach で index を取得するには、 Linq の Select メソッド を使用します。

foreach で インデックス を取得する

Linq + タプル(tuple)
using System.Linq;

string[] stringList = new string[] { "データ1", "データ2", "データ3" };

// タプル(tuple)を使用
foreach (var (value, index) in stringList.Select((value, index) => (value, index)))
{
    System.Console.WriteLine($"index={index} value={value}");
}

Linq + 匿名型

using System.Linq;

string[] stringList = new string[] { "データ1", "データ2", "データ3" };

// 匿名型 を使用
foreach (var item in stringList.Select((value, index) => new { value, index }))
{
    System.Console.WriteLine($"index={item.index} value={item.value}");
}

index用の変数を使用

string[] stringList = new string[] { "データ1", "データ2", "データ3" };

// index用の変数を用意
int index = -1;
foreach (var value in stringList)
{
    // continue を考慮し、必ずループの先頭でインクリメント
    index += 1;
    System.Console.WriteLine($"index={index} value={value}");
}

実行結果 実行結果

速度 や メモリー使用量、見た目のわかりやすさ を考慮すると、 index用の変数を使用するパターンをお勧めします。

お勧め順

  1. index用の変数を使用
  2. Linq + タプル(tuple)
  3. Linq + 匿名型

検証環境

関連ページ