C#のforeach文の使い方について書いています。
foreachについての解説と、下記のことについて書いています。
・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文だと、配列やリストを指定して、そのままループできました。
要素数がある分でループすることが決まっているときには、こちらを使った方が簡単ですし良いかと思います。
for文については、下記に記載したので確認してみてください。
foreachの使い方のまとめ
今回はC#のforeachの使い方について書きました。
記事の内容をまとめると、下記になります。
・foreachはinの左側に変数、右側に配列や要素を指定する。
・breakを使うと、ループを抜けることができた。
・continueを使うと、ループをスキップすることができた。
・forよりもforeachを使った方がバグが発生しずらい。
コメント