.net column

.NET開発者のためのブログメディア

C# でのforeach文の利用方法

2020年05月07日

SE
C# でのforeachは、どのような利用方法があるのでしょうか?

PM
ループ処理を途中で中断することや、処理をスキップすることができます。

foreachとは?

foreach文とは、配列やListに格納された要素に対して記述された処理を繰り返し実行する際に利用するループ文のことです。for文とは違い、indexに使用するint型変数を記載せずに配列の要素を先頭から順番に取得し、処理を実行することができると言った利点を持っています。また、配列の内容をすべて取得した後にはループが自動で終了するため、ループで起こしがちなIndexOutOfRangeExceptionを発生させることがありません。そのため、配列を1つしか利用しない場合や、indexを他の処理に利用しない場合などには、C# ではfor文よりforeach文を利用した方が、エラーの抑制にも繋がります。C# での基本的な構文は以下のようになっています。foreach(型名 変数名 in コレクション) { 実行する処理}in句の右辺、コレクションの部分には、配列やListといった複数の要素を保有するオブジェクトを設定します。in句の左辺にはコレクションに設定された配列やListの要素と同じ型で変数を宣言します。配列をintで作成した場合は、以下のように記載してください。int[] numbers = {1, 2, 3, 4, 5, 6};foreach (int num in numbers)このように記載することによって、配列numbers内に格納された要素がint型変数numの中に先頭から順番に格納されていくことになります。

foreachの利用方法

C# でforeachを利用する場合には、配列またはListのような要素を複数持ったオブジェクトが必要となります。まずは、配列を使った一番基本的な利用方法から確認していきましょう。// 配列の宣言int[] numbers = {1, 2, 3, 4, 5, 6};foreach (int num in numbers){ // 画面に出力 Console.WriteLine(“”{0}””, num);}実行結果123456foreach文で配列を使った場合、配列の先頭の要素から順番に取り出し、変数numに格納していきます。foreach文の内部では変数numの内容を出力していますので、実行結果には配列の中身が順番に表示されることになります。in句の左辺には、右辺に記述した配列と同じ型の変数を宣言する必要があります。このforeach文は、Listでも同様の記載方法で利用することができます。C# では配列のほかにListも多く利用されているため、利用方法は覚えておくといいでしょう。Listを利用した場合は以下のようになります。// Listの宣言List lstNumbers = new List {1, 2, 3, 4, 5, 6};foreach (int num in lstNumbers){ // 画面に出力 Console.WriteLine(“”{0}””, num);}実行結果123456これは、String型を利用しているときも同様に使用することができます。以下の例で確認しましょう。// Listの宣言List lstFruits = new List {“”りんご””, “”みかん””, “”メロン””, “”ぶどう””, “”いちご””};foreach (String fruits in lstFruits){ // 画面に出力 Console.WriteLine(“”{0}””, fruits);}実行結果りんごみかんメロンぶどういちご

ループ処理を途中で中断する方法

C# の通常のfor文では、breakを利用してループを抜けることが可能できますが、foreach文でも同様のことができます。利用方法も一緒で、breakに到達した時点でループを抜けることになります。では、以下のコードを見ながら、C# でのforeachの利用方法を確認していきましょう。// 配列の宣言int[] numbers= {1, 2, 3, 4, 5, 6};foreach (int num in numbers){ if(num == 3) { break; } // 画面に出力 Console.WriteLine(“”{0}””, num);}実行結果12上記のように表記すると、変数numに3が代入された場合にbreakの処理が実行されます。breakが実行されるとその時点でforeach文の処理が中断され、その時点でループを抜けることになります。そのため、実行結果にて3以降が表示されなくなる、という結果になります。breakより上に記載された処理は実行されるため、注意が必要です。以下のように処理の順番を変えると、実行結果が変わります。// 配列の宣言int[] numbers= {1, 2, 3, 4, 5, 6};foreach (int num in numbers){ // 画面に出力 Console.WriteLine(“”{0}””, num); // numが3だった場合はループを抜ける if(num == 3) { break; }}実行結果123処理を一通り実行した後にループを抜けたい場合は、breakをループの最後に表記する必要があります。

処理をスキップする方法

foreach文を利用している場合、特定の要素では処理をスキップしたい場合があります。C# では、そのような場合にはcontinueを利用します。以下のコードでcontinueの利用方法を確認していきましょう。// 配列の宣言int[] numbers= {1, 2, 3, 4, 5, 6};foreach (int num in numbers){ if(num == 4) { // numが4の場合は処理をスキップする continue; } // 画面に出力 Console.WriteLine(“”{0}””, num);}実行結果12356continueを利用すると、その時点で次のループに処理が移ります。そのため、numには次の要素が代入されます。breakのように中断ではなくスキップであるため、4以降も実行結果には表示されます。continueより上に記載された処理は、continueを実行する前に実行されてしまうため注意が必要です。以下のように記載すると、スキップしたいはずの4も表示されてしまいます。// 配列の宣言int[] numbers= {1, 2, 3, 4, 5, 6};foreach (int num in numbers){ // 画面に出力 Console.WriteLine(“”{0}””, num); if(num == 4) { // iが4の場合は処理をスキップする continue; }}実行結果123456

SE
これならC# でのforeach文の利用方法ができそうです。

PM
知名度が低い方法ですが、知っておくと便利なので活用してみてくださいね。

まとめ

for文やwhile文と比べると知名度の低いforeach文ですが、その二つとは違ってindexに当たる変数を宣言しなくても利用することができる、という利点が存在しています。配列やListを使用するときにindexを意識することなく処理を記述できる上、要素をすべて網羅したら自動で終了してくれるため、エラーが起きにくいといった利点もあります。記述方法も非常にスマートで読みやすくまとめることができます。C# のプログラミングで、ループ処理の中で配列やListを利用する場合は、ぜひforeach文を利用してみてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)