foreach 文の中で、インデックスを取得したい、今は何回目の処理なのか知りたい、という場面がたまにあります。
例えば、要素の最初だけ、または最後だけ特別な処理や追加の処理をしたいというとき。
今までは、別途インデックス用の変数や一回だけ処理を処理を行うためのフラグ変数等を用意していたりしましたが、以下でなかなか良い方法が紹介されていました。
特に C# 7.0 以降でタプルを使うと結構シンプルに書けます。
foreach (var (value, index) in collection.Select((v, i) => (v, i)))
{
Console.WriteLine($"{index}:{value}");
}
拡張メソッドとして定義する方法なども紹介されているので、詳細は参考 URL を参照してください。