C# foreachでインデックスを使用する
C#
のforeach
文でインデックスを使用する方法を紹介します。
foreach
の処理でインデックスも使用したいときに以下のように、別にインデックス用の変数を定義することがあります。
int index = 0;
foreach (var user in users)
{
// 処理
}
できればindex
変数のスコープはforeach
文の中だけにしたいため、リストや配列に対してインデックスの情報を付与する拡張メソッドを用意します。
/// <summary>
/// インデックス付きのリストを取得
/// </summary>
/// <param name="collection">リスト</param>
/// <returns>インデックス付きリスト</returns>
public IEnumerable<(T, int)> WithIndex<T>(this IEnumerable<T> collection) {
collection.Select((value, index) => (value, index));
}
以下のように使用します。
int index = 0;
foreach (var user in users)
foreach (var (user, index) in users.WithIndex())
{
// 処理
}
このようにすることで、index
変数を定義することなく、foreach
の処理でインデックスを使用することができます。