C#の繰り返し処理を初心者向けに解説|for・while・foreachの使い方と違い
はじめに
C#でプログラムを書いていると、「同じ処理を何度も実行したい」という場面がよくあります。
たとえば、次のような処理です。
同じメッセージを10回表示する、配列の中身を順番に表示する、ユーザーが正しい値を入力するまで処理を続ける、条件に合うデータだけを取り出すなどです。
このような処理を効率よく書くために使うのが、C#の繰り返し処理です。
C#の繰り返し処理には、主にfor文、while文、foreach文があります。それぞれ使い方や得意な場面が異なるため、違いを理解して使い分けることが大切です。
この記事では、C#の繰り返し処理について、初心者向けに基本構文からサンプルコード、よくあるエラーまでわかりやすく解説します。
1. C#の繰り返し処理とは
C#の繰り返し処理とは、同じ処理や似た処理を複数回実行するための仕組みです。
プログラムでは、同じようなコードを何度も書くよりも、繰り返し文を使ってまとめて書くほうが効率的です。
たとえば、次のようにメッセージを5回表示したい場合を考えてみましょう。
C#Console.WriteLine("こんにちは");
Console.WriteLine("こんにちは");
Console.WriteLine("こんにちは");
Console.WriteLine("こんにちは");
Console.WriteLine("こんにちは");
この書き方でも動きますが、回数が100回、1000回になったら大変です。
そこで、繰り返し処理を使うと次のように書けます。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine("こんにちは");
}
このように、C#の繰り返し処理を使うと、同じ処理を短く、わかりやすく書くことができます。
1-1. 繰り返し処理でできること
繰り返し処理を使うと、次のようなことができます。
数値を1から順番に表示する、配列やリストの中身を順番に取り出す、条件を満たすデータだけを処理する、合計値や平均値を計算する、ユーザー入力を受け取りながら処理を続けるなどです。
たとえば、配列に入っている名前を順番に表示する場合は、次のように書けます。
C#string[] names = { "田中", "佐藤", "鈴木" };
foreach (string name in names)
{
Console.WriteLine(name);
}
実行結果は次のようになります。
C#田中
佐藤
鈴木
このように、繰り返し処理はC#プログラミングの基本であり、実務でも学習でも非常によく使われます。
1-2. C#で使う主な繰り返し文の種類
C#でよく使う繰り返し文には、主に次の種類があります。
| 繰り返し文 | 特徴 |
|---|---|
| for文 | 回数が決まっている繰り返しに向いている |
| while文 | 条件を満たす間だけ繰り返す |
| do-while文 | 最低1回は処理を実行する |
| foreach文 | 配列やリストの要素を順番に処理する |
初心者が最初に覚えるべきなのは、for文、while文、foreach文の3つです。
この3つを理解できれば、C#の基本的な繰り返し処理はかなり書けるようになります。
1-3. 初心者が最初に覚えるべき3つの構文
C#の繰り返し処理で、初心者がまず覚えるべき構文は次の3つです。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
for文は、繰り返す回数が決まっているときに使います。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
count++;
}
while文は、条件を満たしている間だけ処理を繰り返します。
C#string[] fruits = { "りんご", "みかん", "バナナ" };
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
foreach文は、配列やリストなどの要素を1つずつ取り出して処理するときに使います。
2. for文の使い方
2-1. for文とは
for文は、指定した回数だけ処理を繰り返したいときに使う構文です。
C#の繰り返し処理の中でも、特に基本的でよく使われます。
たとえば、「10回繰り返す」「配列の先頭から最後まで順番に処理する」「1から100までの合計を求める」といった場面で使います。
for文は、繰り返しの開始値、条件、増減処理を1行にまとめて書けるため、回数を管理しやすいのが特徴です。
2-2. for文の基本構文
for文の基本構文は次のとおりです。
C#for (初期化; 条件式; 増減式)
{
繰り返したい処理;
}
具体的には、次のように書きます。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
このコードでは、iという変数を使って繰り返し回数を管理しています。
処理の流れは次のとおりです。
| 部分 | 内容 |
|---|---|
int i = 0 | カウンター変数を0から始める |
i < 5 | iが5未満の間だけ繰り返す |
i++ | 1回処理するたびにiを1増やす |
実行結果は次のようになります。
C#0
1
2
3
4
i < 5なので、表示されるのは0から4までです。5は表示されません。
2-3. 回数を指定して繰り返すサンプルコード
次は、メッセージを5回表示するサンプルコードです。
C#for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i + "回目の処理です");
}
実行結果は次のようになります。
C#1回目の処理です
2回目の処理です
3回目の処理です
4回目の処理です
5回目の処理です
i = 1から始まり、i <= 5の間だけ繰り返します。そのため、1回目から5回目まで表示されます。
C#のfor文では、カウンター変数を0から始めることも多いですが、表示上わかりやすくしたい場合は1から始めても問題ありません。
2-4. 配列やリストをfor文で処理する方法
for文は、配列やリストの要素を順番に処理するときにも使えます。
配列をfor文で処理する例を見てみましょう。
C#string[] fruits = { "りんご", "みかん", "バナナ" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
実行結果は次のようになります。
C#りんご
みかん
バナナ
配列の要素数はLengthで取得できます。
fruits[0]は1番目の要素、fruits[1]は2番目の要素、fruits[2]は3番目の要素です。
C#の配列やリストでは、インデックス番号は0から始まります。そのため、for文で配列を処理するときは、次のように書くのが基本です。
C#for (int i = 0; i < 配列.Length; i++)
{
配列[i]を使った処理;
}
Listの場合は、要素数をCountで取得します。
C#List<string> names = new List<string> { "田中", "佐藤", "鈴木" };
for (int i = 0; i < names.Count; i++)
{
Console.WriteLine(names[i]);
}
配列はLength、ListはCountを使う点に注意しましょう。
2-5. for文を使う場面と注意点
for文は、次のような場面で使うのに向いています。
繰り返し回数が決まっているとき、インデックス番号を使いたいとき、配列やリストの特定の位置にアクセスしたいとき、数値を増やしながら処理したいときです。
一方で、for文では条件式を間違えると、意図しない回数だけ処理されたり、配列の範囲外にアクセスしてエラーになったりします。
たとえば、次のコードはエラーになる可能性があります。
C#string[] fruits = { "りんご", "みかん", "バナナ" };
for (int i = 0; i <= fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
fruits.Lengthは3ですが、配列のインデックスは0、1、2までです。
そのため、i <= fruits.Lengthと書くと、最後にfruits[3]へアクセスしようとしてエラーになります。
正しくは次のように書きます。
C#for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
配列やリストをfor文で処理するときは、条件式に<を使うのが基本です。
3. while文の使い方
3-1. while文とは
while文は、指定した条件が成り立っている間、処理を繰り返す構文です。
for文は繰り返し回数が決まっている場合に向いていますが、while文は「いつ終わるかわからない処理」に向いています。
たとえば、ユーザーが正しい値を入力するまで繰り返す、特定の条件を満たすまで処理を続ける、データが取得できる間だけ処理する、といった場面で使います。
3-2. while文の基本構文
while文の基本構文は次のとおりです。
C#while (条件式)
{
繰り返したい処理;
}
条件式がtrueの間、ブロック内の処理が繰り返されます。
次の例を見てみましょう。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
count++;
}
実行結果は次のようになります。
C#0
1
2
3
4
countが5未満の間だけ処理が繰り返されます。
処理の最後でcount++によって値を1ずつ増やしているため、最終的に条件式がfalseになり、ループが終了します。
3-3. 条件を満たす間だけ繰り返すサンプルコード
次は、数値が10未満の間だけ繰り返すサンプルコードです。
C#int number = 1;
while (number < 10)
{
Console.WriteLine(number);
number *= 2;
}
実行結果は次のようになります。
C#1
2
4
8
numberは1から始まり、繰り返すたびに2倍になります。
numberが16になると、number < 10がfalseになるため、ループは終了します。
while文では、このように「条件が成り立っている間だけ続ける」という書き方ができます。
3-4. 無限ループを防ぐ書き方
while文で特に注意したいのが、無限ループです。
無限ループとは、条件式がずっとtrueのままになり、処理が終わらなくなる状態です。
たとえば、次のコードは無限ループになります。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
}
このコードでは、countの値が増えていません。
そのため、count < 5がずっとtrueのままになり、処理が終わりません。
正しくは、次のようにループ内でcountを増やします。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
count++;
}
while文を使うときは、条件式がいつかfalseになるように書くことが重要です。
3-5. do-while文との違い
while文と似た構文に、do-while文があります。
while文は、最初に条件を判定してから処理を実行します。
C#int count = 10;
while (count < 5)
{
Console.WriteLine(count);
}
この場合、最初からcount < 5がfalseなので、処理は1回も実行されません。
一方、do-while文は、先に処理を実行してから条件を判定します。
C#int count = 10;
do
{
Console.WriteLine(count);
} while (count < 5);
この場合、条件はfalseですが、最初に処理が実行されるため、10が1回表示されます。
つまり、違いは次のとおりです。
| 構文 | 特徴 |
|---|---|
| while文 | 条件によっては1回も実行されない |
| do-while文 | 必ず1回は実行される |
ユーザー入力を最低1回は受け取りたい場合などは、do-while文が便利です。
4. foreach文の使い方
4-1. foreach文とは
foreach文は、配列やListなどのコレクションから要素を1つずつ取り出して処理するための構文です。
for文のようにインデックス番号を自分で管理する必要がないため、初心者にもわかりやすい繰り返し文です。
たとえば、配列の中に入っているデータをすべて表示したい場合、foreach文を使うと簡単に書けます。
4-2. foreach文の基本構文
foreach文の基本構文は次のとおりです。
C#foreach (型 変数名 in コレクション)
{
繰り返したい処理;
}
たとえば、文字列の配列を処理する場合は次のように書きます。
C#string[] fruits = { "りんご", "みかん", "バナナ" };
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
fruitsの中から要素が1つずつ取り出され、fruitという変数に入ります。
そのため、1回目はりんご、2回目はみかん、3回目はバナナが処理されます。
4-3. 配列をforeach文で処理するサンプルコード
配列をforeach文で処理する例を見てみましょう。
C#int[] numbers = { 10, 20, 30, 40, 50 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}
実行結果は次のようになります。
C#10
20
30
40
50
foreach文を使うと、配列の要素数やインデックス番号を意識せずに、すべての要素を順番に処理できます。
配列の中身を単純に表示したい場合や、すべての要素に対して同じ処理をしたい場合に便利です。
4-4. Listをforeach文で処理するサンプルコード
foreach文は、Listにもよく使われます。
C#List<string> names = new List<string> { "田中", "佐藤", "鈴木" };
foreach (string name in names)
{
Console.WriteLine(name);
}
実行結果は次のようになります。
C#田中
佐藤
鈴木
Listは、要素の追加や削除がしやすいコレクションです。
その中身を順番に処理したい場合、foreach文を使うとシンプルに書けます。
なお、Listを使う場合は、ファイルの先頭に次の記述が必要になることがあります。
C#using System.Collections.Generic;
現在のC#プロジェクトでは最初から使える場合もありますが、エラーが出た場合は確認してみましょう。
4-5. foreach文を使う場面と注意点
foreach文は、次のような場面に向いています。
配列やListの要素をすべて順番に処理したいとき、インデックス番号が不要なとき、コードを読みやすくしたいときです。
一方で、foreach文では基本的に「何番目の要素か」を直接扱いません。
また、foreach文で繰り返している最中に、対象のListへ要素を追加したり削除したりするとエラーになることがあります。
たとえば、次のようなコードは避けましょう。
C#List<string> names = new List<string> { "田中", "佐藤", "鈴木" };
foreach (string name in names)
{
if (name == "佐藤")
{
names.Remove(name);
}
}
foreach文で処理中のListを変更すると、例外が発生する可能性があります。
削除したい場合は、for文を後ろから回すなどの方法を使うと安全です。
C#for (int i = names.Count - 1; i >= 0; i--)
{
if (names[i] == "佐藤")
{
names.RemoveAt(i);
}
}
foreach文は便利ですが、コレクションの中身を変更する処理には注意が必要です。
5. for・while・foreachの違いと使い分け
5-1. for文・while文・foreach文の違い一覧
C#の繰り返し処理でよく使うfor文、while文、foreach文には、それぞれ得意な使い方があります。
| 構文 | 向いている場面 | 特徴 |
|---|---|---|
| for文 | 回数が決まっている処理 | カウンター変数で回数を管理できる |
| while文 | 条件によって続ける処理 | 条件がtrueの間だけ繰り返す |
| foreach文 | 配列やListの全要素を処理 | 要素を1つずつ簡単に取り出せる |
初心者のうちは、まず次のように考えるとわかりやすいです。
回数が決まっているならfor文、条件次第で続けるならwhile文、配列やListを順番に処理するならforeach文を使います。
5-2. 回数が決まっている場合はfor文
繰り返す回数がはっきり決まっている場合は、for文を使うのが基本です。
たとえば、10回処理を実行したい場合は次のように書きます。
C#for (int i = 0; i < 10; i++)
{
Console.WriteLine("処理を実行します");
}
for文は、開始値、条件式、増減式が1行にまとまっているため、何回繰り返すのかがわかりやすいです。
また、インデックス番号を使って配列やListの特定の要素にアクセスしたい場合にも向いています。
5-3. 条件によって繰り返す場合はwhile文
繰り返し回数が事前に決まっておらず、条件によって処理を続けたい場合はwhile文を使います。
たとえば、入力された文字がendになるまで繰り返す場合は、次のように書けます。
C#string input = "";
while (input != "end")
{
Console.WriteLine("文字を入力してください。endで終了します。");
input = Console.ReadLine();
}
このコードでは、ユーザーがendと入力するまで処理が繰り返されます。
このように、終了するタイミングが条件によって変わる場合は、while文が使いやすいです。
5-4. 配列やリストの要素を順番に処理する場合はforeach文
配列やListの要素を最初から最後まで順番に処理したい場合は、foreach文が便利です。
C#string[] colors = { "赤", "青", "緑" };
foreach (string color in colors)
{
Console.WriteLine(color);
}
foreach文では、インデックス番号を使わずに要素を取り出せます。
そのため、「要素を1つずつ処理したいだけ」という場合は、for文よりも読みやすくなります。
5-5. 初心者が迷ったときの選び方
初心者がC#の繰り返し処理で迷ったときは、次の基準で選ぶとよいです。
| やりたいこと | 使う構文 |
|---|---|
| 5回、10回など回数を決めて繰り返したい | for文 |
| 条件が成り立つ間だけ繰り返したい | while文 |
| 配列やListの中身を順番に処理したい | foreach文 |
| 要素番号を使って処理したい | for文 |
| 最低1回は実行したい | do-while文 |
まずは、for文とforeach文をよく使うと考えておくとよいでしょう。
配列やListを扱う場面ではforeach文、回数や番号を管理したい場面ではfor文を使うのが基本です。
6. 繰り返し処理でよく使う制御文
6-1. breakでループを途中終了する
breakは、ループを途中で終了したいときに使います。
たとえば、配列の中から特定の値を見つけたら処理を終了する場合に便利です。
C#int[] numbers = { 1, 3, 5, 8, 10 };
foreach (int number in numbers)
{
if (number == 8)
{
Console.WriteLine("8が見つかりました");
break;
}
Console.WriteLine(number);
}
このコードでは、numberが8になった時点でbreakが実行され、ループが終了します。
breakを使うと、不要な処理を続けずに済みます。
6-2. continueで次の繰り返しに進む
continueは、現在の処理をスキップして、次の繰り返しに進みたいときに使います。
たとえば、偶数だけを表示したい場合は次のように書けます。
C#for (int i = 1; i <= 10; i++)
{
if (i % 2 != 0)
{
continue;
}
Console.WriteLine(i);
}
実行結果は次のようになります。
C#2
4
6
8
10
i % 2 != 0は、奇数かどうかを判定しています。
奇数の場合はcontinueによってConsole.WriteLine(i);がスキップされ、次の繰り返しに進みます。
6-3. ネストしたループの考え方
ループの中にさらにループを書くことを、ネストしたループといいます。
たとえば、九九の表を表示する場合は、次のように書けます。
C#for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
Console.Write(i * j + "\t");
}
Console.WriteLine();
}
外側のfor文は段を表し、内側のfor文は掛ける数を表しています。
ネストしたループでは、外側のループが1回実行されるたびに、内側のループが最初から最後まで実行されます。
ただし、ネストが深くなりすぎるとコードが読みにくくなるため、必要以上に複雑にしないことが大切です。
6-4. ループ内で変数を扱うときの注意点
ループ内で変数を使う場合は、変数をどこで宣言するかに注意しましょう。
たとえば、合計値を計算する場合は、合計用の変数をループの外で宣言します。
C#int total = 0;
for (int i = 1; i <= 5; i++)
{
total += i;
}
Console.WriteLine(total);
実行結果は次のようになります。
C#15
もしtotalをループの中で宣言すると、繰り返しのたびに初期化されてしまい、正しく合計できません。
C#for (int i = 1; i <= 5; i++)
{
int total = 0;
total += i;
}
このような書き方では、ループが1回実行されるたびにtotalが0に戻ってしまいます。
繰り返しの結果を保持したい変数は、ループの外で宣言するのが基本です。
7. 初心者がつまずきやすいエラーと対処法
7-1. 条件式を間違えて無限ループになる
while文やfor文では、条件式を間違えると無限ループになることがあります。
C#int i = 0;
while (i < 10)
{
Console.WriteLine(i);
}
このコードでは、iの値が変わらないため、i < 10がずっとtrueのままです。
正しくは次のように、ループ内でiを増やします。
C#int i = 0;
while (i < 10)
{
Console.WriteLine(i);
i++;
}
無限ループを防ぐには、条件式がいつかfalseになるかを確認することが大切です。
7-2. カウンター変数の増減を忘れる
for文では増減式を書くため忘れにくいですが、while文ではカウンター変数の増減を自分で書く必要があります。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
count++;
}
count++を書き忘れると、処理が終わらなくなります。
while文を書くときは、条件に使っている変数がループ内で変化しているかを必ず確認しましょう。
7-3. 配列の範囲外にアクセスしてエラーになる
C#では、配列の範囲外にアクセスするとエラーになります。
C#int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers[3]);
このコードはエラーになります。
配列の要素数は3ですが、インデックス番号は0、1、2までです。
for文で配列を処理するときも、次のように書くとエラーになります。
C#for (int i = 0; i <= numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
正しくは次のようにします。
C#for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
配列の最後のインデックスはLength - 1であることを覚えておきましょう。
7-4. foreach文の中でコレクションを変更してエラーになる
foreach文でListを処理している最中に、要素を追加したり削除したりするとエラーになることがあります。
C#List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
foreach (int number in numbers)
{
if (number % 2 == 0)
{
numbers.Remove(number);
}
}
このようなコードは避けましょう。
削除したい場合は、for文を後ろから回す方法があります。
C#for (int i = numbers.Count - 1; i >= 0; i--)
{
if (numbers[i] % 2 == 0)
{
numbers.RemoveAt(i);
}
}
後ろから処理すれば、要素を削除しても未処理のインデックスに影響しにくくなります。
7-5. セミコロンや波括弧の書き忘れ
C#では、セミコロン;や波括弧{ }を書き忘れるとコンパイルエラーになります。
たとえば、次のコードはセミコロンが足りません。
C#Console.WriteLine("こんにちは")
正しくは次のように書きます。
C#Console.WriteLine("こんにちは");
また、for文やwhile文のブロックを表す波括弧も重要です。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
初心者のうちは、波括弧の対応がわからなくなることがあります。
Visual StudioやVisual Studio Codeなどのエディタを使うと、自動で補完してくれるためミスを減らせます。
8. 実践で覚えるC#の繰り返し処理サンプル
8-1. 1から10までの数値を表示する
まずは、for文を使って1から10までの数値を表示してみましょう。
C#for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
実行結果は次のようになります。
C#1
2
3
4
5
6
7
8
9
10
回数が決まっている繰り返しなので、for文が適しています。
8-2. 合計値を計算する
次は、1から10までの合計を計算する例です。
C#int total = 0;
for (int i = 1; i <= 10; i++)
{
total += i;
}
Console.WriteLine("合計は" + total + "です");
実行結果は次のようになります。
C#合計は55です
total += i;は、total = total + i;と同じ意味です。
繰り返し処理では、このように合計値を計算する処理がよく使われます。
8-3. 条件に合うデータだけ表示する
次は、配列の中から偶数だけを表示するサンプルです。
C#int[] numbers = { 1, 2, 3, 4, 5, 6 };
foreach (int number in numbers)
{
if (number % 2 == 0)
{
Console.WriteLine(number);
}
}
実行結果は次のようになります。
C#2
4
6
number % 2 == 0は、2で割った余りが0かどうかを判定しています。
このように、繰り返し処理とif文を組み合わせると、条件に合うデータだけを処理できます。
8-4. 配列の中身をすべて出力する
配列の中身をすべて出力する場合は、foreach文を使うと簡単です。
C#string[] animals = { "犬", "猫", "うさぎ" };
foreach (string animal in animals)
{
Console.WriteLine(animal);
}
実行結果は次のようになります。
C#犬
猫
うさぎ
インデックス番号が不要な場合は、foreach文を使うと読みやすいコードになります。
一方、何番目の要素かも表示したい場合は、for文が便利です。
C#string[] animals = { "犬", "猫", "うさぎ" };
for (int i = 0; i < animals.Length; i++)
{
Console.WriteLine(i + "番目: " + animals[i]);
}
実行結果は次のようになります。
C#0番目: 犬
1番目: 猫
2番目: うさぎ
8-5. ユーザー入力を受け取りながら繰り返す
ユーザーが特定の文字を入力するまで繰り返す場合は、while文が向いています。
C#string input = "";
while (input != "exit")
{
Console.WriteLine("文字を入力してください。exitで終了します。");
input = Console.ReadLine();
Console.WriteLine("入力内容: " + input);
}
このコードでは、ユーザーがexitと入力するまで処理が続きます。
ユーザー入力のように、何回繰り返すか事前にわからない処理では、while文がよく使われます。
9. C#の繰り返し処理に関するよくある質問
9-1. for文とforeach文はどちらを使うべき?
配列やListの要素を単純に順番に処理するだけなら、foreach文がおすすめです。
C#foreach (string name in names)
{
Console.WriteLine(name);
}
一方で、インデックス番号を使いたい場合や、要素の位置を指定して処理したい場合はfor文が向いています。
C#for (int i = 0; i < names.Count; i++)
{
Console.WriteLine(i + ": " + names[i]);
}
つまり、要素番号が不要ならforeach文、要素番号が必要ならfor文と考えるとわかりやすいです。
9-2. while文はどんなときに使う?
while文は、繰り返し回数が事前に決まっていないときに使います。
たとえば、ユーザーが正しい値を入力するまで処理を続ける場合や、特定の条件が満たされるまで処理を繰り返す場合です。
C#int number = 0;
while (number < 100)
{
number += 10;
Console.WriteLine(number);
}
このように、条件を基準に繰り返したいときはwhile文が便利です。
9-3. foreach文でインデックス番号は使える?
foreach文では、基本的にインデックス番号は自動では用意されません。
ただし、自分でカウンター変数を用意すれば、インデックスのように扱うことはできます。
C#string[] names = { "田中", "佐藤", "鈴木" };
int index = 0;
foreach (string name in names)
{
Console.WriteLine(index + ": " + name);
index++;
}
ただし、インデックス番号を使う処理が多い場合は、最初からfor文を使ったほうが自然です。
C#for (int i = 0; i < names.Length; i++)
{
Console.WriteLine(i + ": " + names[i]);
}
9-4. 無限ループは必ず悪い書き方?
無限ループは、意図せず発生している場合は問題です。
しかし、意図的に使う場合もあります。
たとえば、常に入力を待ち続けるプログラムや、ゲームのメインループなどでは、無限ループに近い考え方が使われることがあります。
C#while (true)
{
string input = Console.ReadLine();
if (input == "exit")
{
break;
}
Console.WriteLine(input);
}
このコードでは、while (true)によって無限に繰り返しますが、exitが入力されたらbreakで終了します。
無限ループを使う場合は、必ず終了条件を用意することが大切です。
9-5. Unityでも同じ繰り返し処理を使える?
Unityでも、C#のfor文、while文、foreach文は同じように使えます。
たとえば、Unityで複数のオブジェクトを順番に処理したい場合にも、foreach文を使えます。
C#foreach (GameObject enemy in enemies)
{
enemy.SetActive(false);
}
また、配列やListに入ったデータを処理する場合も、通常のC#と同じ考え方で書けます。
ただし、UnityではUpdate()の中で重い繰り返し処理を書くと、ゲームの動作が重くなることがあります。
Unityで繰り返し処理を使う場合は、毎フレーム大量の処理を実行しないように注意しましょう。
まとめ
C#の繰り返し処理は、同じ処理を何度も実行したいときに使う基本的な構文です。
主に使うのは、for文、while文、foreach文の3つです。
for文は、繰り返し回数が決まっている場合に向いています。カウンター変数を使って、何回処理するかを管理できます。
while文は、条件を満たしている間だけ処理を繰り返したい場合に使います。ユーザー入力や、終了タイミングが事前に決まっていない処理に向いています。
foreach文は、配列やListの要素を1つずつ取り出して処理したい場合に便利です。インデックス番号を使わずに書けるため、コードがシンプルで読みやすくなります。
C#の繰り返し処理を使い分けるポイントは、次のとおりです。
| やりたいこと | 使う構文 |
|---|---|
| 回数を決めて繰り返す | for文 |
| 条件を満たす間だけ繰り返す | while文 |
| 配列やListを順番に処理する | foreach文 |
| 最低1回は処理したい | do-while文 |
| 途中で終了したい | break |
| 一部の処理をスキップしたい | continue |
初心者のうちは、まずfor文で回数指定の繰り返しを覚え、次にforeach文で配列やListの処理に慣れ、最後にwhile文で条件による繰り返しを理解するとスムーズです。
C#の繰り返し処理は、プログラミングの基礎として非常に重要です。サンプルコードを実際に書いて動かしながら、for文、while文、foreach文の違いと使い方を身につけていきましょう。

