C#入門⑬ foreach ── 中身を、ラクに全部取り出す
前回まで、配列と List(データのまとまり)をやりました。
今回は、そのまとまりの中身を、もっとラクに全部取り出す方法。foreach(フォーイーチ)です。
foreach とは、「まとまりの中身を、ひとつずつ、最後まで取り出す」くり返しです。
for文の、ちょっと面倒なところ
前回まで、配列やListの中身を全部取り出すのに、for文を使っていました。
int[] scores = { 80, 95, 70 };
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine(scores[i]);
}
これでちゃんと動きます。でも、よく見ると、やりたいことに対して書くことが多いんです。
本当にやりたいのは「中身を順に表示する」だけ。なのに、
- カウンター
iを用意して i < scores.Lengthで条件を書いてi++で増やしてscores[i]で番号を指定して取り出す
カウンターの管理が、地味に手間です。そして第11回で書いたように、番号を1つ間違えるとエラーになる危険もあります。
foreach なら、こう書ける
同じことを foreach で書くと、こうなります。
int[] scores = { 80, 95, 70 };
foreach (int score in scores)
{
Console.WriteLine(score);
}
実行結果は、for文のときと同じ。80・95・70 が順に表示されます。
でも、書く量がぐっと減りました。カウンターも、番号も、個数も出てきません。
形を見てみましょう。
foreach (int score in scores)
これは、「scores の中身を、ひとつずつ score に取り出して、最後までくり返す」という意味です。
scores… 取り出したいまとまりscore… 取り出した中身を、一時的に入れる箱- 1回ごとに、
scoreに 80 → 95 → 70 と順に入る
「中身を、頭から順に、最後まで」。それだけを、シンプルに書けます。
何が嬉しいのか
foreach の良いところは、番号を気にしなくていいことです。
for文では「0から始まる」「最後は個数マイナス1」と、番号の管理に気を使いました。番号をはみ出すとエラーにもなりました。
foreach は、「全部、順番に」やってくれるので、その心配がありません。「中身を全部、順に処理したい」だけなら、foreach の方が安全で読みやすいんです。
List でも、まったく同じように使えます。
List<string> names = new List<string>();
names.Add("山田");
names.Add("田中");
foreach (string name in names)
{
Console.WriteLine(name + "さん");
}
for文と foreach、どう使い分けるか
ここが大事なところです。
- foreach … 中身を 全部、順番に 処理したいとき。番号は気にしない
- for文 … 番号そのものを使いたいとき。「3番目だけ」「逆順で」「1個飛ばしで」など
たとえば「全員の点数を表示」なら foreach で十分。
「奇数番目だけ」「後ろから」のように、番号を細かく操作したいならfor文。
ふだんは foreach、番号で細かい操作がしたいときだけ for文。そんな使い分けが自然です。
つまずきポイント
foreach で注意したいのは、取り出した中身を書き換えても、元のまとまりは変わらないことです。
int[] scores = { 80, 95, 70 };
foreach (int score in scores)
{
score = score + 10; // score を増やしても…
}
// scores の中身は、80・95・70 のまま!
score は、あくまで「一時的に取り出したコピー」を入れる箱です。それを書き換えても、元の scores には影響しません。
「foreach は、見る(読む)のは得意。でも、書き換えるのは苦手」。中身を書き換えたいときは、for文と番号を使う。そう覚えておきましょう。
まとめ
foreach は、まとまりの中身を、頭から順に全部取り出すくり返し。
foreach (int score in scores)
{
Console.WriteLine(score);
}
- 番号を気にせず、全部を順に処理できる
- 「全部見る」なら foreach、「番号を操作する」なら for文
- 取り出した中身を書き換えても、元は変わらない
次回は、名前をつけてデータを引ける Dictionary(辞書) を紹介します。

