【C#】foreach文の使い方についてわかりやすく詳しく解説

C#プログラミングにおいて、配列やリストなどの複数の要素を扱う場合、foreach文は非常に便利です。

しかし、初心者にとっては使い方がわかりづらいこともあります。そこで本記事では、C#でのforeach文の使い方をわかりやすく解説します。

目次

foreach文とは

foreach文は、配列やリストなどのコレクションを繰り返し処理するための構文です。for文と比べて、より簡潔に書くことができます。 以下は、配列をforeach文で繰り返し処理する例です。

int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

上記のコードでは、numbersという名前のint型の配列を定義しています。そして、foreachキーワードを使って、配列内の要素を順番に取り出していきます。

取り出した要素は、numberという変数に代入されます。最後に、Console.WriteLineメソッドを使って、各要素を表示しています。 このように、foreach文はfor文よりも簡潔で読みやすいコードを書くことができます。

foreach文の基本的な使い方

C#において、foreach文は配列やリストなどのコレクションを繰り返し処理するための構文です。基本的な使い方は以下の通りです。

foreach (var item in collection)
{
    // 処理内容
}

上記のコードでは、collectionという名前のコレクションから順番に要素を取り出して、それぞれitemという変数に代入しています。

そして、// 処理内容の部分には、各要素に対して行いたい処理を記述します。 例えば、以下のような配列があった場合、

int[] numbers = { 1, 2, 3, 4, 5 };

この配列をforeach文で繰り返し処理する場合は、次のように書きます。

foreach (var number in numbers)
{
    Console.WriteLine(number);
}

上記のコードでは、配列numbersから順番に要素を取り出して、それぞれ変数numberに代入しています。

そして、各要素を改行付きで表示する処理が行われます。

このようにforeach文を使うことで、簡単かつ効率的にコレクション内の全ての要素を処理することができます。

foreach文での配列の処理方法

C#のforeach文は、配列を簡単に処理するための構文です。この記事では、foreach文を使って配列を処理する方法について解説します。

配列とは

まずはじめに、配列とは複数のデータを一つの変数に格納することができるデータ型です。

例えば、以下のような整数型の配列を宣言することができます。

int[] numbers = { 1, 2, 3, 4, 5 };

この場合、numbersという名前の変数に1から5までの整数が格納されます。

foreach文での配列の処理方法

次に、foreach文を使って配列を処理する方法について解説します。

以下は、先程宣言したnumbers配列をforeach文で処理する例です。

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

上記コードでは、numbers配列内の要素を順番に取り出してnumber変数に代入し、その値をコンソール上に表示しています。結果的に1から5までが順番に表示されます。

また、文字列型やオブジェクト型など他のデータ型でも同様にforeach文で処理することが可能です。

foreach文で利用可能なデータ型

最後に、foreach文で利用可能なデータ型を紹介します。以下は主なものです。

  • 配列
  • コレクション(ListやDictionaryなど)
  • 文字列
  • オブジェクト(IEnumerableインターフェースを実装しているもの) 以上がC#でforeach文を使って配列を処理する方法についての解説です。

foreach文でのリストの処理方法

C#において、foreach文は配列だけでなく、リストの処理にも使用することができます。

リストは配列と同様に複数の要素を格納することができるデータ構造ですが、動的に要素を追加・削除することができる点が異なります。 以下では、foreach文を用いたリストの処理方法について説明します。

リストの作成

まずは、リストを作成してみましょう。以下のようにListクラスを使用して、int型の要素を持つリストを作成します。

List<int> numbers = new List<int>();

要素の追加

次に、リストに要素を追加してみましょう。Addメソッドを使用することで、末尾に要素を追加することができます。

numbers.Add(1);
numbers.Add(2);
numbers.Add(3);

foreach文での処理

リストへの要素追加が完了したら、foreach文を使ってリスト内の全ての要素を取得してみましょう。以下はその例です。

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

上記コードでは、numbersという名前のリストから順番に値(int型)を取り出し、numberという変数に代入しています。そしてConsole.WriteLineメソッドでnumber変数の値(1, 2, 3)を表示しています。

要素数の取得

また、Countプロパティを使用することで、リスト内の要素数(=配列長)も取得することが出来ます。

Console.WriteLine(numbers.Count); // 出力結果:3

以上がC#におけるforeach文でのリストの基本的な処理方法です。

foreach文での辞書の処理方法

C#のforeach文は、配列やリストなどのコレクションを簡単に処理することができます。今回は、辞書(Dictionary)を使ったforeach文の基本的な使い方について解説します。

辞書(Dictionary)とは

辞書(Dictionary)は、キー(key)と値(value)のペアでデータを管理するコレクションです。キーを指定することで、対応する値を取得することができます。以下は、辞書の宣言方法です。

Dictionary<string, int> dict = new Dictionary<string, int>();

上記の例では、string型のキーとint型の値を持つ辞書を宣言しています。

foreach文での辞書の処理方法

辞書(Dictionary)でも、foreach文を使って簡単に処理することができます。以下は、辞書内のすべてのキー(key)と値(value)を出力するサンプルコードです。

Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("apple", 100);
dict.Add("banana", 200);
dict.Add("orange", 300);
foreach (KeyValuePair<string, int> kvp in dict)
{
    Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value);
}

上記の例では、KeyValuePair<string, int>型で要素を取得しています。KeyValuePair構造体は、キー(key)と値(value)からなるペアを表します。

また、in演算子によって辞書内のすべての要素に対してループ処理が行われます。 以上が、C#におけるforeach文での辞書(Dictionary)の基本的な使い方です。

foreach文での多次元配列の処理方法

多次元配列とは、複数の配列を組み合わせたものであり、2次元配列や3次元配列などがあります。foreach文を使って多次元配列を処理する方法について解説します。

2次元配列の場合

まずは、2次元配列の場合から見ていきましょう。以下は、2行3列の2次元配列を宣言して、foreach文で要素を取り出す例です。

int[,] array = { { 1, 2, 3 }, { 4, 5, 6 } };
foreach (int i in array)
{
    Console.WriteLine(i);
}

この場合、出力結果は以下のようになります。

1
2
3
4
5
6

要素が順番に取り出されることが確認できます。

3次元配列の場合

続いて、3次元配列の場合です。以下は、2面3行4列の3次元配列を宣言して、foreach文で要素を取り出す例です。

int[,,] array = {
    {{1, 2, 3, 4}, {5, 6, 7, 8}, {9,10,11,12}},
    {{13,14,15,16}, {17,18,19,20}, {21,22,23,24}}
};
foreach (int i in array)
{
    Console.WriteLine(i);
}

この場合、出力結果は以下のようになります。

1
2
3
4
5
6
7
8
9
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24  

要素が順番に取り出されることが確認できます。

ただし、多次元配列では要素数が非常に多くなるため、foreach文で全ての要素を処理することはあまり一般的ではありません。

必要な範囲だけ処理するように注意しましょう。

foreach文でのnullチェックの方法

C#のforeach文を使用する際に、配列やリストなどの要素がnullである場合、エラーが発生してしまいます。

そのため、事前にnullチェックを行う必要があります。 以下は、foreach文でのnullチェックの方法です。

int[] array = null;
if (array != null)
{
    foreach (var item in array)
    {
        // 処理
    }
}

上記の例では、配列arrayがnullである場合はforeach文を実行せずに処理を終了します。

また、C# 6.0以降では、null条件演算子を使用することで簡潔にnullチェックを行うことが出来ます。

int[] array = null;
foreach (var item in array?.Where(x => x > 0))
{
    // 処理
}

上記の例では、配列arrayがnullである場合はWhereメソッドが呼ばれずに処理を終了します(例外は発生しません)。

また、Whereメソッド内でもnullチェックが行われているため安全です。

foreach文の注意点

foreach文は、配列やリスト、辞書などのコレクションを繰り返し処理するために使用される便利な構文です。しかし、注意点がいくつかあります。

1. コレクションの変更はできない

foreach文でコレクションを繰り返し処理している場合、そのコレクション自体を変更することはできません。例えば、以下のように要素を削除する処理はエラーとなります。

List<int> numbers = new List<int>() { 1, 2, 3, 4 };
foreach (int number in numbers)
{
    if (number == 2)
    {
        numbers.Remove(number); // エラー
    }
}

この場合、numbersリストが変更されてしまうため、ループ中にエラーが発生します。このような場合は、for文やwhile文を使用してループ処理を行う必要があります。

2. nullチェックが必要

foreach文でnullのコレクションを繰り返し処理しようとすると、NullReferenceExceptionが発生します。そのため、事前にnullチェックを行う必要があります。

List<int> numbers = null;
foreach (int number in numbers) // NullReferenceException
{
    Console.WriteLine(number);
}

上記の例ではnumbersがnullであるため、ループ中にNullReferenceExceptionが発生します。これを回避するためには以下のようにnullチェックを行います。

List<int> numbers = null;
if (numbers != null)
{
    foreach (int number in numbers)
    {
        Console.WriteLine(number);
    }
}

目次