【C#】foreachのループでの豆知識

foreachで何回目のループかを判定する方法

カウンター変数を宣言してインクリメント

ぱっと思いつきそうなやり方です。

int i = 1;
var collection = Enumerable.Range(100, 10);
foreach (var item in collection)
{
    Console.WriteLine($"{i}回目のループです。");
    i++;
}
//1回目のループです。
//2回目のループです。
//3回目のループです。
//4回目のループです。
//5回目のループです。
//6回目のループです。
//7回目のループです。
//8回目のループです。
//9回目のループです。
//10回目のループです。

LinqのSelectでインデックスと値を射影

上記と結果は同じですが、ちょっとカッコイイやり方です。

var collection = Enumerable.Range(100, 10);
foreach (var item in collection.Select((x, i) => new { Index = i + 1, Value = x }))
{
    Console.WriteLine($"{item.Index}回目のループです。");
}
//1回目のループです。
//2回目のループです。
//3回目のループです。
//4回目のループです。
//5回目のループです。
//6回目のループです。
//7回目のループです。
//8回目のループです。
//9回目のループです。
//10回目のループです。

foreachでループの末尾か判定

インデックスがコレクションの要素数と等しいかで判定します。

var collection = Enumerable.Range(100, 10);
foreach (var item in collection.Select((x, i) => new { Index = i + 1, Value = x }))
{
    if (item.Index == collection.Count())
    {
        Console.WriteLine($"ループの末尾です。値:{item.Value}");
    }
    //ループの末尾です。値:109
}

Leave a Reply

Your email address will not be published. Required fields are marked *