C#のforeachの使い方!リストや配列の要素分ループする!

C# C#

C#のforeach文の使い方について書いています。
foreachについての解説と、下記のことについて書いています。

・breakで処理を抜ける
・continueで処理をスキップする
・forとforeachの違い

記事内のサンプルコードについては、.Netのバージョン6(C#のバージョン10)で確認しました。

foreachとは?

C#のforeachは配列やリストなどの要素の数分、ループ処理することができます。

配列でループする

例えば、配列を使ったときには、下記のようにループできます。

string[] fruits = new string[5] {"orange", "banana", "grape", "melon", "apple"};

foreach (string fruit in fruits) {
    Console.WriteLine(fruit);
}

最初にfruits変数に対して、文字列の配列を作っています。

次の処理でforeach文を使って、fruits配列を繰り返し(ループ)処理しています。
inの右側に指定しているのが、作成した文字列配列のfruits配列です。

inの左側には、ループするごとに要素を代入する変数を定義します。
今回は配列の要素をfruit変数で受け取るようにしました。
foreach文の中の処理では、配列の要素を出力しているだけです。

プログラムを実行すると、下記のように全ての要素が出力されました。

orange
banana
grape
melon
apple

配列の要素数分、ループ処理できたことが確認できました。

リストでループする

同様にして、リストでループすることもできます。

List<string> fruits = new List<string> {"banana", "lemon", "apple", "grape", "peach"};

foreach (string fruit in fruits) {
    Console.WriteLine(fruit);
}

同じようにfruits変数を作って、文字列型のリストを代入しています。

次の処理で、foreach文でリストの要素数がある間ループしています。
配列のときと同様に、右側にループしたいリストを指定します。
左側にはリストの要素を受け取る変数を定義します。

今回は右側にfruitsリストを指定して、左側に文字列型のfruit変数で値を受けるようにしました。
ループが回るたびにfruit変数に値が設定されます。

プログラムを実行すると、下記のように出力されました。

banana
lemon
apple
grape
peach

リストでも要素数分、ループ処理ができたことが確認できました。

breakを使って処理を抜ける

breakを使うことで、foreachのループ処理の途中で処理を抜けることができます。
例えば、下記のように使えます。

List<string> fruits = new List<string> {"banana", "lemon", "apple", "grape", "peach"};

foreach (string fruit in fruits) {
    if (fruit == "apple") {
        break;
    }
    Console.WriteLine(fruit);
}

最初にfruits変数に、文字列のリストを代入しました。

次の処理で、foreach文を使ってループ処理をしています。
ループ処理の最初で、fruit変数が「apple」だったらbreakするようにしています。
そのためfruit変数の値が「apple」のときには、foreach文から抜けて処理が終わります。

プログラムを実行すると、下記のように出力されました。

banana
lemon

リストの先頭から2つ出力されて、「apple」がfruit変数に設定されて処理を抜けました。

continueを使ってスキップする

continueを使うことで、foreachのループ処理を特定の条件のときにスキップすることができます。
例えば、下記のように使えます。

List<string> fruits = new List<string> {"banana", "lemon", "apple", "grape", "peach"};

foreach (string fruit in fruits) {
    if (fruit == "lemon" || fruit == "grape") {
        continue;
    }
    Console.WriteLine(fruit);
}

最初にfruits変数に、文字列のリストを代入しました。

次の処理で、foreach文を使ってループ処理をしています。
ループ処理の中で、fruit変数の値が「lemon」または「grape」だったときにcontinueしています。
そのため、「lemon」または「grape」のときには、後続の処理をスキップしてループの先頭に戻ります。

プログラムを実行すると、下記のように出力されました。

banana
apple
peach

リストから取り出された値が「lemon」または「grape」のときには、処理がスキップされていることが確認できました。

forとforeachの違いは?

for文でも配列やリストの値をひとつずつ取得して、ループ処理することができます。
ですが、初期値・継続条件・ステップ値の定義が必要なため、間違えるとバグを作る可能性があります。

foreach文だと、配列やリストを指定して、そのままループできました。
要素数がある分でループすることが決まっているときには、こちらを使った方が簡単ですし良いかと思います。

foreachの使い方のまとめ

今回はC#のforeachの使い方について書きました。
記事の内容をまとめると、下記になります。

・foreachを使うことで、配列やリストの要素の数分ループ処理できた。
・foreachはinの左側に変数、右側に配列や要素を指定する。
・breakを使うと、ループを抜けることができた。
・continueを使うと、ループをスキップすることができた。
・forよりもforeachを使った方がバグが発生しずらい。

コメント

タイトルとURLをコピーしました