zukucode
主にWEB関連の情報を技術メモとして発信しています。

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の処理でインデックスを使用することができます。


関連記事