[C# 入門] foreachで配列やコレクションを1つずつ取り出す

foreachを使うと配列やコレクションといったデータの集まりからすべての要素を一つずつ取り出しながら処理を行うことができます。

スポンサーリンク

foreachの使い方

foreachの構文はこんな感じです。

foreach ( 要素の型 要素を受け取る変数名 in 配列やコレクション) { ...; }

要素の型:配列やコレクションの要素の型を指定します。たいていはvarでいいと思います。
要素を受け取る変数名:各要素が順番にこの変数に入ります、{ } ブロック内のみで有効です。
配列やコレクション:要素を取り出したい配列・コレクションを指定します。

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        // 配列をforeachで順番に取り出す
        int[] ary = new int[] { 10, 20, 30 };
        // foreachを使って各要素を1つずつ取り出す
        foreach (int i in ary) {
            Console.WriteLine(i);
        }

        // string型のリストをforeachで順番に取り出す
        List<string> list = new List<string> { "a", "b", "c" };
        // foreachを使って各要素を1つずつ取り出す
        foreach (string str in list) {
            Console.WriteLine(str);
        }
    }
}

また、foreachの { } ブロック内の処理が1行だけの場合、{ } を省略することができます。

using System;
class Program
{
    public static void Main()
    {
        // 配列をforeachで順番に取り出す
        int[] ary = new int[] { 10, 20, 30 };
        // foreachを使って各要素を1つずつ取り出す
        foreach (int i in ary) Console.WriteLine(i);
    }
}
スポンサーリンク

途中でforeachを抜け出す(break)

break キーワードを使うとforeachの途中で処理を中断してforeachブロック{ }を抜けることができます。
大体の場合、ifで条件を満たした場合にbreakするという使い方だと思います。

using System;
class Program
{
    public static void Main()
    {
        // 配列をforeachで順番に取り出す
        int[] ary = new int[] { 10, 20, 30, 40, 50 };
        // foreachを使って各要素を1つずつ取り出す
        foreach (int i in ary) {
            Console.WriteLine(i);
            // iが30だったらforeachを抜ける
            if (i == 30) break;
        }
    }
}

出力結果はこんな感じです。3つ目の要素(30)を処理してforeachを抜けています。

10
20
30
スポンサーリンク

foreachの途中で次の要素にスキップする(continue)

continue キーワードを使うとforeachの途中で次の要素へスキップすることができます。
こちらもifで条件を指定して処理をスキップするという使い方が多いと思います。

using System;
class Program
{
    public static void Main()
    {
        // 配列をforeachで順番に取り出す
        int[] ary = new int[] { 1, 2, 3, 4, 5 };
        // foreachを使って各要素を1つずつ取り出す
        foreach (int i in ary) {

            // 奇数の場合に処理をスキップ
            if (i % 2 == 1) continue;

            Console.WriteLine(i);
        }
    }
}
2
4
スポンサーリンク

forとforeachの違い

for文の場合は、カウンター変数を使いインデックスを使って配列やコレクションにアクセスしたいときに使います。

using System;
class Program
{
    public static void Main()
    {
        int[] ary = new int[] { 10, 20, 30, 40 };
        for (int i = 0; i < ary.Length; i++) {
            // インデックスを使って各要素にアクセス
            Console.WriteLine(ary[i]);
        }
    }
}

foreach文ではインデックスを使わずにすべての要素を順番に取り出すことができます。

using System;
class Program
{
    public static void Main()
    {
        int[] ary = new int[] { 10, 20, 30, 40 };

        foreach (int i in ary) {
            // foreachを使って各要素を1つずつ取り出す
            Console.WriteLine(i);
        }
    }
}
スポンサーリンク

foreachが使えるのはIEnumerableなもの

見出し通りですがforeachのinに指定できるのはIEnumerableというインターフェースを実装している必要があります。自分で作ったクラスをforeachで使いたいというときにこのインターフェースを使う必要があるので、そのときに思い出してください。

イテレーター(iterator)という機能を使い、簡単にIEnumerableインターフェースを実装する方法があります。詳細はイテレーター(反復子)を使ってforeachで使えるメソッドを作るを見てください。

とりあえず、foreachが使えるのは配列とコレクション(List、Dictionaryなど)と覚えておけば大丈夫です。


C# プログラミング講座に戻る

コメント

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