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}");
}
- タプル(tuple) を使用するには、 C# 7.0 以降のバージョンが必要です。
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用の変数を使用するパターンをお勧めします。
お勧め順
- index用の変数を使用
- Linq + タプル(tuple)
- Linq + 匿名型
検証環境
- .NET 5.0
- Microsoft Visual Studio Professional 2019 Version 16.9.4
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.985 Experience: Windows Feature Experience Pack 120.2212.2020.0