C# foreach – ループ処理でコレクションの中身を取得する

foreachとは、コレクションの中身を取得するループ処理です。
コレクションとは、配列などのオブジェクトの集まりのことです。

foreach(型名 変数名 in コレクション)
{
    変数を使った処理;
}

コレクションの要素をループごとに順番に変数に代入して、ブロック内で変数を使った処理をします。

型名 変数名

foreachで使う変数の宣言をします。
この変数には、1回のforeachのループでコレクションの中身が1つずつ代入されます。
型名はコレクションと同じ型名を指定します。

コレクション

中身を取得したいコレクションを指定します。

処理;

変数を使った処理を書きます。
例えばConsole.WriteLine(変数名);と書くと、コレクションの中身を表示できます。

## foreachで配列の要素を取得する

using static System.Console;
class Test { static void Main() { string[] kago = { "イチゴ", "ミカン" }; // 配列kagoの初期化 foreach (string nakami in kago) // 変数nakamiの宣言とコレクションに配列kagoの指定 { WriteLine(nakami); // 変数nakamiを表示 } } }
イチゴ
ミカン

foreachを使って配列kagoの要素を全て表示しています。
1. 変数nakamiに配列kagoの1番目の要素の 〈 イチゴ 〉 が代入されます。
2. ブロック内のWriteLine(nakami);が実行され、 〈 イチゴ 〉 と表示されます。
3. 変数nakamiに配列kagoの2番目の要素の 〈 ミカン 〉 が代入されます。
4. ブロック内のWriteLine(nakami);が実行され、 〈 ミカン 〉 と表示されます。
5. 変数nakamiに代入する要素がなくなったため、foreachを終了します。

string nakami

コレクションの要素を代入する変数に、文字列型の変数nakamiを指定します。

kago

コレクションに配列kagoを指定します。

WriteLine(nakami);

ループごとに変数nakamiの要素を表示します。

## foreachで2次元配列の要素を取得する
2次元配列の要素を取得する場合も、配列の要素を取得するときと同じように書きます。

foreach(型名 変数名 in 2次元配列)
{
    処理;
}

1回のループごとに、2次元配列の1行目の要素を先頭から[0, 0]、[0, 1]、[0, 2]…と順番に変数に代入され、ブロック内の処理が実行されます。
1列目の要素を全て代入されると、2行目の要素を先頭から[1, 0]、[1, 1]、[1, 2]…と順番に変数に代入され、ブロック内の処理が実行されます。
全ての配列の要素が変数に代入されるまで、変数に要素の代入とブロック内の処理が繰り返されます。
代入する要素がなくなるとforeachを終了します。

using static System.Console;
class Test { static void Main() { string[,] kago = { { "イチゴ(0 0)", "イチゴ(0 1)" }, { "ミカン(1 0)", "ミカン(1 1)" } }; foreach (string nakami in kago) { WriteLine(nakami); } } }
イチゴ(0 0)
イチゴ(0 1)
ミカン(1 0)
ミカン(1 1)

1. foreachが実行されると2次元配列kagoの1番目の要素が変数nakamiに代入されます。
2. WriteLine(nakami);が実行され、イチゴ(0 0)が表示されます。
3. 2次元配列kagoの2番目の要素が変数nakamiに代入されます。
4. WriteLine(nakami);が実行され、イチゴ(0 1)が表示されます。
5. 2次元配列kagoの3番目の要素が変数nakamiに代入されます。
6. WriteLine(nakami);が実行され、ミカン(1 0)が表示されます。
7. 2次元配列kagoの4番目の要素が変数nakamiに代入されます。
8. WriteLine(nakami);が実行され、ミカン(1 1)が表示されます。
9. 変数に代入する要素がなくなったので、foreachを終了します。