C#のforeach文の基本!配列やコレクションを簡単に繰り返し処理する方法
生徒
「C#で配列やリストを1つずつ取り出して処理したいんですが、簡単な方法はありますか?」
先生
「はい、C#にはforeach文というとても便利な繰り返し処理の書き方があります。」
生徒
「for文とどう違うんですか?初心者でも使えますか?」
先生
「もちろん使えますよ!foreachは簡単に書けて、間違いも起きにくいんです。では、具体的に見ていきましょう。」
1. foreach文とは?
C#のforeach文は、「配列(はいれつ)」や「リスト」などのコレクション(複数のデータの集まり)を、順番に1つずつ取り出して処理するための文法です。
初心者でも使いやすく、繰り返し処理の中でももっともミスが少なく、直感的に書けるのが特徴です。
2. foreach文の基本構文
foreach文の書き方は、以下のようになります。
foreach (データ型 変数名 in コレクション名)
{
// 1つずつ取り出して処理
}
「コレクション名」から1つずつデータを取り出して、「変数名」に代入し、その中で処理を行います。すべての要素が処理されるまで自動で繰り返します。
3. 配列を使ったforeach文の例
まずは、配列を使った基本的なforeach文の例を見てみましょう。
string[] fruits = { "りんご", "バナナ", "みかん" };
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
このコードでは、fruitsという配列から1つずつ「くだもの」の名前を取り出して、表示しています。
りんご
バナナ
みかん
4. foreach文のイメージを簡単に説明
たとえば、お弁当箱の中に「おにぎり」「卵焼き」「唐揚げ」が入っているとします。foreach文は、それをフタを開けて、1つずつ取り出して食べるようなイメージです。
箱に入っている順番どおりに取り出して、すべて終わるまで繰り返します。自分で数えたり、管理する必要がないので、初心者でも使いやすいです。
5. List(リスト)でも使えるforeach文
C#には、配列のほかにもList(リスト)というコレクションがあります。foreach文は、Listにも同じように使えます。
using System.Collections.Generic;
List<int> numbers = new List<int>() { 10, 20, 30 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}
10
20
30
Listの中の数字が1つずつ取り出されて、numberに入ります。
6. foreach文の注意点
foreach文の中では、基本的に要素の値を書き換えることはできません。
以下のようなコードはエラーになります:
string[] animals = { "ネコ", "イヌ", "トリ" };
foreach (string animal in animals)
{
animal = "ゾウ"; // ← これはエラーになります
}
取り出した変数animalは読み取り専用の扱いになるので、変更したい場合はfor文などを使う必要があります。
7. foreach文が便利な理由
- 配列やリストを1つずつ取り出す処理がとても簡単に書ける
- 要素数を気にしなくてよい(自動で最後まで繰り返してくれる)
- 読みやすくてエラーが少ないコードになる
初心者でも理解しやすく、よく使う構文のひとつなので、しっかり覚えておきましょう。
まとめ
C#のforeach文は、初心者でも扱いやすく、配列やリストといったコレクションの要素を順番に取り出して処理するための基本構文として非常に重要です。for文と異なり、インデックス番号を気にせず記述できるため、シンプルでミスが少ないコードが書けるという大きなメリットがあります。たとえば配列を使って要素を順番に表示したい場合、foreachを使うだけで意図した処理をすぐに実現できます。
実際の現場でも、foreach文は非常に頻繁に登場します。とくに、コレクションの中身を参照して処理を行うようなシナリオ(表示処理、検索処理、条件分岐)では、そのシンプルさが重宝されます。一方で、foreachは読み取り専用の文法なので、繰り返しの中で値を更新したい場合にはfor文のほうが適しています。こうした違いを理解しながら、使い分けていくことが大切です。
また、C#では配列だけでなく、ListやDictionary、HashSetなど様々なコレクション型がありますが、foreach文はそれらすべてに共通して使用できます。これにより、異なる型のデータ構造でも一貫した記述が可能になり、プログラム全体が統一された見通しのよい形になります。特に、初心者の方がList<T>のような構造を扱い始めるとき、foreach文は非常に頼りになるツールです。
たとえば、次のようにListの中身をチェックしながら合計値を計算することも簡単にできます:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> scores = new List<int> { 70, 85, 90, 60 };
int total = 0;
foreach (int score in scores)
{
total += score;
}
Console.WriteLine("合計点は: " + total);
}
}
この例のように、foreach文を使うと要素の取り出しと合計計算を同時に行えるため、コードが簡潔になります。プログラミングを始めたばかりの方でも、foreach文の特徴を活かせば、処理のイメージがつかみやすくなります。また、コードがfor文に比べて読みやすく、バグの発生を抑えるという点でも学習初期にふさわしい文法です。
ただし、foreach文の中では要素そのものを変更できないため、「要素を加工して上書きしたい」というケースではfor文のほうが柔軟に対応できます。この違いを理解しておけば、より状況に合った繰り返し処理を選択できるようになります。まずは、要素を読み取って表示したり、条件に応じて分岐したりする場面からforeach文に慣れていくと良いでしょう。
なお、foreach文は、要素数の変化に左右されず常に安定した処理を行えるという点でも安心して使えます。たとえば配列の長さが変更されたり、Listに要素が追加されたとしても、ループ部分の記述を変える必要がなく、内部で自動的に対応してくれます。このような自動性が、コーディングの効率を高め、ミスを減らす結果につながっています。
生徒
「foreach文って思ったよりもずっとシンプルで、配列やリストの中身を取り出すのに便利ですね!」
先生
「そうですね。for文だとインデックス管理が必要ですが、foreach文なら順番に処理してくれるので、見た目もすっきりしますよ。」
生徒
「でも、foreachの中で値を書き換えられないんですね。そこは少し注意しなきゃいけない点ですね。」
先生
「その通りです。中身を更新したい場合には、for文でインデックスを使って直接変更する必要があります。でも、読み取りだけならforeachのほうが断然わかりやすいです。」
生徒
「Listにも使えると知って驚きました。しかも書き方も配列とほとんど同じで、すぐ使えそうです。」
先生
「ListやDictionary、いろんなコレクションにforeach文は使えるので、これから実際のアプリでもどんどん活躍しますよ。」
生徒
「まずは配列で試して、慣れてきたらListや他のコレクションにも挑戦してみます!」