基礎から学ぶC#入門 90日コース | 制御構文・メソッド - Day 13:foreach

Web APP 90日で身につけるC#
スポンサーリンク
スポンサーリンク

Day 13 のゴールと全体イメージ

Day 13 では、foreach 文を使って「配列」や「コレクション」の要素を順番に処理する方法を学びます。 これまでの for・while は「カウンターで回す」スタイルでしたが、foreach は

「中身をひとつずつ取り出して処理する」

ことに特化した構文です。

学ぶことは次のとおりです。

  • foreach の基本構文
  • 配列との組み合わせ
  • コレクション(List など)との組み合わせ

これらをステップバイステップでかみ砕きながら、初心者の方でも自然に使えるようになることを目指します。

foreach 文とは何か

「全部なめる」ための構文

foreach 文は、

「配列やコレクションの中身を、先頭から順番にひとつずつ取り出して処理する」

ための構文です。基本形は次のようになります。

foreach (要素の型 変数名 in 配列やコレクション)
{
    // 取り出した要素に対して行いたい処理
}
C#

例えば、文字列の配列 names の中身を順番に表示したい場合は、次のように書きます。

string[] names = { "Alice", "Bob", "Charlie" };

foreach (string name in names)
{
    Console.WriteLine(name);
}
C#

重要ポイント:

  • in の右側に「回したい対象」(配列・コレクション)を書きます。
  • in の左側には「1 要素分の型」と「その要素を受け取る変数名」を書きます。
  • foreach は「中身を全部なめる」処理に向いています。

配列と foreach の基本

配列をおさらいする

配列は、同じ型の値をまとめて扱うための入れ物です。

string[] fruits = { "Apple", "Banana", "Orange" };
C#

この配列 fruits には、3 つの文字列が入っています。 これを foreach で順番に取り出して表示してみます。

例1:配列の要素をすべて表示する

using System;

class Program
{
    static void Main(string[] args)
    {
        // フルーツの配列を用意します
        string[] fruits = { "Apple", "Banana", "Orange" };

        // foreach で配列の中身を順番に取り出して表示します
        foreach (string fruit in fruits)
        {
            // fruit には、配列の要素が 1 つずつ入ってきます
            Console.WriteLine($"フルーツ:{fruit}");
        }

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • string fruit in fruitsfruit は、「今取り出した 1 要素」を表します。
  • foreach の中では、インデックス(0, 1, 2 など)を意識する必要がありません。
  • 「全部表示したい」「全部チェックしたい」といった場面で、とても書きやすくなります。

for と foreach の違い

インデックスを使うか、中身を直接扱うか

同じ配列を for で回すと、次のようになります。

string[] fruits = { "Apple", "Banana", "Orange" };

for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine(fruits[i]);
}
C#

ここでは、

  • i というカウンターを使ってインデックスを指定し、
  • fruits[i] で要素を取り出しています。

一方、foreach ではインデックスを使わず、要素そのものを直接扱います。

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

違いの整理:

  • for
    • インデックス(i)を使って要素を取り出す。
    • 「何番目か」を意識したいときに向いている。
  • foreach
    • 要素そのものを直接扱う。
    • 「全部なめたい」「順番に処理したい」場面に向いている。

初心者の方は、「インデックスが必要なときは for」「中身を全部処理したいだけなら foreach」と覚えておくと分かりやすいです。

例2:数値配列と foreach

合計や平均を計算する

数値の配列を foreach で回して、合計を計算する例を見てみます。

using System;

class Program
{
    static void Main(string[] args)
    {
        // テストの点数の配列
        int[] scores = { 80, 90, 75, 100 };

        int sum = 0; // 合計値を入れる変数

        // foreach で scores の中身を順番に取り出して、合計を計算します
        foreach (int score in scores)
        {
            sum += score; // sum = sum + score と同じ意味です
        }

        double average = (double)sum / scores.Length; // 平均値を計算します

        Console.WriteLine($"合計点:{sum}");
        Console.WriteLine($"平均点:{average}");

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • foreach の中で、取り出した要素を使って計算することができます。
  • scores.Length は「配列の要素数」です。
  • 合計や平均など、「全部を対象にした計算」と foreach は相性が良いです。

コレクションと foreach

List<T> と foreach の組み合わせ

C# では、配列だけでなく List\<T\> というコレクションもよく使われます。 List は「あとから追加・削除ができる配列のようなもの」です。

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // 文字列のリストを作成します
        List<string> animals = new List<string>();

        // 要素を追加します
        animals.Add("Dog");
        animals.Add("Cat");
        animals.Add("Bird");

        // foreach でリストの中身を順番に表示します
        foreach (string animal in animals)
        {
            Console.WriteLine($"動物:{animal}");
        }

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • List でも、配列と同じように foreach が使えます。
  • List<string> のように、型を指定してリストを作ります。
  • Add メソッドで要素を追加し、foreach で中身をなめる、という流れが基本です。

例3:ユーザー入力を List にためて foreach で表示

「入力履歴」をまとめて表示する

foreach とコレクションの組み合わせを、少し実用的な形で見てみます。

「ユーザーに何度か文字列を入力してもらい、最後に全部まとめて表示する」

というプログラムです。

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<string> inputs = new List<string>(); // 入力された文字列をためるリスト

        Console.WriteLine("3 回文字を入力してください:");

        for (int i = 1; i <= 3; i++)
        {
            Console.WriteLine($"{i} 回目の入力:");
            string text = Console.ReadLine();

            inputs.Add(text); // 入力された文字列をリストに追加します
        }

        Console.WriteLine();
        Console.WriteLine("=== 入力された文字列一覧 ===");

        // foreach でリストの中身を順番に表示します
        foreach (string item in inputs)
        {
            Console.WriteLine(item);
        }

        Console.ReadLine();
    }
}
C#

ポイント:

  • 「集める」ときは List、「まとめて処理する」ときは foreach、という組み合わせが自然です。
  • for で「回数を決めて入力」、foreach で「全部表示」というように、 それぞれの構文の得意分野を活かしています。

foreach の注意点:要素の変更について

foreach の中で要素を書き換えるのは基本的に不可

配列や List の要素を foreach の中で直接書き換えることは、基本的にはできません(特に List ではコンパイルエラーになります)。

例えば、次のようなコードは問題になります。

List<int> numbers = new List<int> { 1, 2, 3 };

foreach (int n in numbers)
{
    // n = n * 2; // これはコンパイルエラーになります(n は読み取り専用)
}
C#

理由:

  • foreach の変数(ここでは n)は「読み取り専用」として扱われるため、 直接代入して書き換えることはできません。

対策:

  • 要素を書き換えたい場合は、for 文でインデックスを使ってアクセスする。
  • または、新しいコレクションを作って、加工した値をそちらに入れる。

初心者の方は、まずは「foreach は読む専用」「書き換えたいときは for」と覚えておくと安全です。

練習テンプレート:foreach で遊ぶ

配列版テンプレート

using System;

class Program
{
    static void Main(string[] args)
    {
        // 好きな言葉の配列
        string[] words = { "Hello", "World", "C#", "Programming" };

        // foreach で全部表示します
        foreach (string w in words)
        {
            Console.WriteLine($"単語:{w}");
        }

        Console.ReadLine();
    }
}
C#

List 版テンプレート

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // 整数のリスト
        List<int> numbers = new List<int> { 10, 20, 30, 40 };

        int sum = 0;

        foreach (int n in numbers)
        {
            Console.WriteLine($"要素:{n}");
            sum += n;
        }

        Console.WriteLine($"合計:{sum}");
        Console.ReadLine();
    }
}
C#

これらのテンプレートを使って、

  • 要素を増やしたり減らしたりしてみる
  • 文字列を ToUpper()Length で加工して表示してみる
  • 条件を付けて「特定の要素だけ表示する」(例:3 文字以上の単語だけ)

といった練習をすると、foreach と配列・コレクションの感覚が自然に身についていきます。

Day 13 のまとめ

Day 13 では、

  • foreach 文の基本構文
  • 配列との組み合わせ(全要素の表示・合計計算など)
  • コレクション(List)との組み合わせ(入力をためて表示するなど)

を通して、

「配列やコレクションの中身を、先頭から順番にひとつずつ処理する」

というスタイルを体験しました。

for・while が「回数や条件で回す」構文なのに対して、 foreach は「中身を全部なめる」構文です。

ぜひ、

  • 配列や List を自分で作って、いろいろなデータを入れてみる
  • foreach で「全部表示」「全部チェック」「全部足す」といった処理を書いてみる
  • 「インデックスが必要なときは for」「中身を全部処理したいだけなら foreach」という使い分けを意識する

といった練習を通して、「コレクションを自然に扱える感覚」を育てていってください。

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