C#のforループ入門|書き方・繰り返し処理・foreachとの違いを初心者向けに解説
はじめに
C#でプログラムを書いていると、同じ処理を何度も繰り返したい場面がよくあります。たとえば、「1から10までの数字を表示する」「配列の中身を順番に取り出す」「リストの要素をすべてチェックする」といった処理です。
このような繰り返し処理でよく使われるのが、forループです。英語では「C# for loop」と検索されることも多く、C#を学び始めた初心者が最初につまずきやすい重要な構文のひとつです。
この記事では、C#のforループの基本的な書き方から、配列やリストでの使い方、foreachやwhileとの違い、初心者が間違えやすいポイントまで、サンプルコードを使ってわかりやすく解説します。
1. C#のforループとは?初心者向けにわかりやすく解説
1-1. forループは「決まった回数だけ繰り返す」ための構文
C#のforループは、同じ処理を決まった回数だけ繰り返したいときに使う構文です。
たとえば、次のような処理を考えてみましょう。
C#Console.WriteLine("こんにちは");
Console.WriteLine("こんにちは");
Console.WriteLine("こんにちは");
Console.WriteLine("こんにちは");
Console.WriteLine("こんにちは");
このように同じ処理を何度も書くと、コードが長くなり、修正もしづらくなります。そこでforループを使うと、次のように短く書けます。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine("こんにちは");
}
このコードは、「こんにちは」を5回表示します。
1-2. forループでできること
C#のforループでは、主に次のような処理ができます。
数値を順番に表示する、指定した回数だけ処理を繰り返す、配列やリストの要素を順番に取り出す、合計値を計算する、条件に一致するデータだけ処理する、表のようなデータを二重ループで扱う、といった場面でよく使われます。
特に、何回繰り返すかがあらかじめ決まっている場合、forループはとても使いやすい構文です。
1-3. while文やforeach文との違いを先にざっくり理解する
C#には、forのほかにも繰り返し処理を行う構文があります。代表的なものがwhile文とforeach文です。
for文は、繰り返す回数が決まっているときに向いています。while文は、条件が満たされている間だけ繰り返す処理に向いています。foreach文は、配列やリストなどの要素を順番に取り出すときに向いています。
たとえば、10回繰り返したいならfor、ユーザーが正しい値を入力するまで繰り返したいならwhile、配列の中身を順番に表示するだけならforeachが使いやすいです。
2. C#のforループの基本構文
2-1. for文の書き方
C#のfor文は、次のように書きます。
C#for (初期化式; 条件式; 反復式)
{
繰り返したい処理;
}
具体的なコードにすると、次のようになります。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
このコードを実行すると、次のように表示されます。
0
1
2
3
4
2-2. 初期化式・条件式・反復式の役割
for文の丸括弧の中には、3つの要素があります。
C#for (int i = 0; i < 5; i++)
int i = 0は初期化式です。ループを始める前に、変数iを0で初期化しています。
i < 5は条件式です。この条件がtrueの間、ループの中の処理が実行されます。
i++は反復式です。ループの処理が1回終わるたびに実行されます。ここでは、iの値を1ずつ増やしています。
2-3. forループの処理が実行される順番
forループは、次の順番で処理されます。
まず初期化式が実行されます。次に条件式が判定されます。条件式がtrueなら、波括弧の中の処理が実行されます。処理が終わると反復式が実行されます。その後、再び条件式が判定されます。
先ほどのコードで確認してみましょう。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
処理の流れは次のようになります。
i = 0 → 条件 i < 5 は true → 0を表示 → i++で1になる
i = 1 → 条件 i < 5 は true → 1を表示 → i++で2になる
i = 2 → 条件 i < 5 は true → 2を表示 → i++で3になる
i = 3 → 条件 i < 5 は true → 3を表示 → i++で4になる
i = 4 → 条件 i < 5 は true → 4を表示 → i++で5になる
i = 5 → 条件 i < 5 は false → ループ終了
2-4. まず覚えるべき基本形
初心者のうちは、まず次の形を覚えるのがおすすめです。
C#for (int i = 0; i < 回数; i++)
{
繰り返したい処理;
}
たとえば、10回繰り返したい場合は次のように書きます。
C#for (int i = 0; i < 10; i++)
{
Console.WriteLine("処理を実行します");
}
C#のforループでは、0から始めて「回数未満」まで繰り返す書き方がよく使われます。
3. C#のforループの基本的な使い方
3-1. 1から10まで繰り返し表示する
1から10までの数字を表示するには、次のように書きます。
C#for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
このコードでは、iの初期値を1にしています。そして、条件式をi <= 10にすることで、10まで表示されます。
実行結果は次のとおりです。
1
2
3
4
5
6
7
8
9
10
3-2. 0から始まるループを書く
C#では、配列やリストのインデックス番号が0から始まります。そのため、forループも0から始めることがよくあります。
C#for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
実行結果は次のようになります。
0
1
2
3
4
5
6
7
8
9
i < 10なので、表示される最後の値は9です。10は表示されません。
3-3. カウントアップするforループ
カウントアップとは、数値を増やしながら繰り返すことです。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine("iの値: " + i);
}
i++は、iの値を1増やすという意味です。
C#i++;
これは次のコードと同じ意味です。
C#i = i + 1;
3-4. カウントダウンするforループ
数値を減らしながら繰り返すこともできます。
C#for (int i = 10; i >= 1; i--)
{
Console.WriteLine(i);
}
このコードでは、iを10から始めて、1ずつ減らしています。
実行結果は次のようになります。
10
9
8
7
6
5
4
3
2
1
i--は、iの値を1減らすという意味です。
3-5. 指定した回数だけ処理を繰り返す
指定した回数だけ処理を繰り返したい場合は、回数を変数にすると読みやすくなります。
C#int count = 3;
for (int i = 0; i < count; i++)
{
Console.WriteLine("処理を実行しました");
}
このコードは、countの値が3なので、3回繰り返されます。
後から繰り返し回数を変更したい場合も、countの値を変えるだけで済みます。
4. 配列・リストでforループを使う方法
4-1. 配列の要素をforループで順番に取り出す
配列の中身を順番に取り出すときにも、forループはよく使われます。
C#string[] fruits = { "りんご", "バナナ", "みかん" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
実行結果は次のようになります。
りんご
バナナ
みかん
fruits[i]のように書くことで、配列の各要素にアクセスできます。
4-2. 配列のLengthを使う理由
配列の要素数を取得するには、Lengthを使います。
C#fruits.Length
配列の要素数を直接数字で書くこともできますが、あまりおすすめしません。
C#for (int i = 0; i < 3; i++)
{
Console.WriteLine(fruits[i]);
}
この書き方だと、配列の要素数が変わったときに、ループの条件も修正する必要があります。修正を忘れると、エラーの原因になります。
次のようにLengthを使えば、配列の要素数が変わっても安全です。
C#for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
4-3. Listの要素をforループで処理する
List<T>の要素をforループで処理する場合は、Countを使います。
C#List<string> names = new List<string> { "佐藤", "鈴木", "田中" };
for (int i = 0; i < names.Count; i++)
{
Console.WriteLine(names[i]);
}
配列ではLength、リストではCountを使う点に注意しましょう。
4-4. インデックス番号を使いたいときの書き方
forループは、インデックス番号を使いたいときに便利です。
C#string[] colors = { "赤", "青", "緑" };
for (int i = 0; i < colors.Length; i++)
{
Console.WriteLine($"{i}番目: {colors[i]}");
}
実行結果は次のようになります。
0番目: 赤
1番目: 青
2番目: 緑
配列やリストの「何番目の要素か」を使いたい場合は、foreachよりもforループのほうが書きやすいです。
4-5. 範囲外アクセスを防ぐ注意点
配列やリストでよくあるエラーが、範囲外アクセスです。
C#string[] fruits = { "りんご", "バナナ", "みかん" };
for (int i = 0; i <= fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
このコードはエラーになります。理由は、配列のインデックスが0から始まるためです。
fruits.Lengthは3ですが、使えるインデックスは0、1、2です。i <= fruits.Lengthにすると、最後にfruits[3]へアクセスしようとしてしまいます。
正しくは次のように書きます。
C#for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
配列やリストを扱うときは、基本的にi < 配列.Lengthまたはi < リスト.Countと書くようにしましょう。
5. forループでよく使う制御文
5-1. breakでループを途中終了する
breakを使うと、ループを途中で終了できます。
C#for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}
Console.WriteLine(i);
}
実行結果は次のようになります。
0
1
2
3
4
iが5になった時点でbreakが実行され、ループが終了します。
5-2. continueで処理をスキップする
continueを使うと、その回の処理だけをスキップして、次のループへ進めます。
C#for (int i = 0; i < 5; i++)
{
if (i == 2)
{
continue;
}
Console.WriteLine(i);
}
実行結果は次のようになります。
0
1
3
4
iが2のときだけConsole.WriteLine(i);が実行されません。
5-3. 条件分岐と組み合わせる
forループは、if文と組み合わせて使うことが多いです。
C#for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
Console.WriteLine(i + "は偶数です");
}
}
%は割り算の余りを求める演算子です。i % 2 == 0は、「2で割った余りが0」という意味なので、偶数を判定できます。
5-4. 無限ループにならないための注意点
forループでは、条件式がずっとtrueのままだと無限ループになります。
C#for (int i = 0; i < 10; i--)
{
Console.WriteLine(i);
}
このコードは、iがどんどん小さくなるため、i < 10の条件がずっと満たされ続けます。その結果、ループが終わりません。
カウントアップする場合はi++、カウントダウンする場合はi--を使い、条件式と反復式の方向をそろえることが大切です。
6. forループの応用パターン
6-1. 2ずつ増やして繰り返す
forループでは、1ずつではなく2ずつ増やすこともできます。
C#for (int i = 0; i <= 10; i += 2)
{
Console.WriteLine(i);
}
実行結果は次のようになります。
0
2
4
6
8
10
i += 2は、iに2を足すという意味です。
6-2. 偶数・奇数だけを処理する
偶数だけを処理する場合は、2ずつ増やす方法が使えます。
C#for (int i = 2; i <= 10; i += 2)
{
Console.WriteLine(i);
}
奇数だけを処理する場合は、1から始めて2ずつ増やします。
C#for (int i = 1; i <= 10; i += 2)
{
Console.WriteLine(i);
}
また、if文で判定する方法もあります。
C#for (int i = 1; i <= 10; i++)
{
if (i % 2 != 0)
{
Console.WriteLine(i);
}
}
6-3. 合計値を計算する
forループは、数値の合計を計算するときにも便利です。
C#int sum = 0;
for (int i = 1; i <= 10; i++)
{
sum += i;
}
Console.WriteLine("合計: " + sum);
実行結果は次のようになります。
合計: 55
sum += iは、sum = sum + iと同じ意味です。
6-4. 最大値・最小値を求める
配列の中から最大値を求める例を見てみましょう。
C#int[] numbers = { 12, 5, 28, 9, 17 };
int max = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i] > max)
{
max = numbers[i];
}
}
Console.WriteLine("最大値: " + max);
最初にnumbers[0]を最大値として仮に設定し、残りの要素と比較していきます。
最小値を求める場合は、比較の向きを逆にします。
C#int min = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i] < min)
{
min = numbers[i];
}
}
Console.WriteLine("最小値: " + min);
6-5. ループの中で文字列を連結する
forループの中で文字列を連結することもできます。
C#string result = "";
for (int i = 1; i <= 5; i++)
{
result += i.ToString();
if (i < 5)
{
result += ", ";
}
}
Console.WriteLine(result);
実行結果は次のようになります。
1, 2, 3, 4, 5
ただし、大量の文字列を連結する場合は、StringBuilderを使うと効率的です。
C#using System.Text;
StringBuilder builder = new StringBuilder();
for (int i = 1; i <= 5; i++)
{
builder.Append(i);
if (i < 5)
{
builder.Append(", ");
}
}
Console.WriteLine(builder.ToString());
7. 二重forループの使い方
7-1. 二重forループとは
二重forループとは、forループの中にさらにforループを書くことです。
C#for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
Console.WriteLine($"i={i}, j={j}");
}
}
外側のループが1回動くたびに、内側のループが最初から最後まで実行されます。
7-2. 表や行列のようなデータを処理する
二重ループは、表や行列のように「行」と「列」があるデータを処理するときによく使います。
C#int[,] matrix =
{
{ 1, 2, 3 },
{ 4, 5, 6 }
};
for (int row = 0; row < 2; row++)
{
for (int col = 0; col < 3; col++)
{
Console.Write(matrix[row, col] + " ");
}
Console.WriteLine();
}
実行結果は次のようになります。
1 2 3
4 5 6
外側のループで行を管理し、内側のループで列を管理しています。
7-3. 九九表を作るサンプル
二重forループの代表的な例として、九九表を作ってみましょう。
C#for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
Console.Write((i * j).ToString().PadLeft(2) + " ");
}
Console.WriteLine();
}
このコードでは、外側のiが段、内側のjが掛ける数を表しています。
7-4. 二重ループで処理の流れを理解する
次のコードを見てください。
C#for (int i = 1; i <= 3; i++)
{
Console.WriteLine("外側: " + i);
for (int j = 1; j <= 2; j++)
{
Console.WriteLine(" 内側: " + j);
}
}
実行結果は次のようになります。
外側: 1
内側: 1
内側: 2
外側: 2
内側: 1
内側: 2
外側: 3
内側: 1
内側: 2
外側のループが1回進むたびに、内側のループは毎回1から始まります。この流れを理解すると、二重ループがかなり読みやすくなります。
7-5. ネストが深くなりすぎる場合の注意点
forループの中にさらにforループを書き、その中にまたforループを書くような状態をネストが深いといいます。
ネストが深くなると、コードの流れがわかりにくくなります。
C#for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 10; k++)
{
Console.WriteLine($"{i}, {j}, {k}");
}
}
}
必要な場合もありますが、初心者のうちは二重ループまでを目安にして、複雑になりすぎる場合はメソッドに分けるなど、読みやすさを意識しましょう。
8. forループとforeachの違い
8-1. foreachはコレクションの要素を順番に取り出す構文
foreachは、配列やリストなどのコレクションから、要素を順番に取り出すための構文です。
C#string[] fruits = { "りんご", "バナナ", "みかん" };
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
このコードは、配列fruitsの要素を1つずつ取り出して表示します。
8-2. forループが向いているケース
forループが向いているのは、インデックス番号を使いたい場合や、指定した回数だけ繰り返したい場合です。
C#string[] fruits = { "りんご", "バナナ", "みかん" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine($"{i}: {fruits[i]}");
}
このように、何番目の要素かを使いたい場合はforループが便利です。
また、逆順に処理したい場合にもforループが向いています。
C#for (int i = fruits.Length - 1; i >= 0; i--)
{
Console.WriteLine(fruits[i]);
}
8-3. foreachが向いているケース
foreachが向いているのは、配列やリストの要素を先頭から順番に取り出すだけの場合です。
C#List<string> names = new List<string> { "佐藤", "鈴木", "田中" };
foreach (string name in names)
{
Console.WriteLine(name);
}
インデックス番号が不要で、単純にすべての要素を処理したいだけなら、foreachのほうが読みやすいことが多いです。
8-4. インデックスが必要ならforループを使う
インデックス番号が必要な場面では、基本的にforループを使うとわかりやすくなります。
たとえば、リストの中身を番号付きで表示する場合です。
C#List<string> tasks = new List<string> { "設計", "実装", "テスト" };
for (int i = 0; i < tasks.Count; i++)
{
Console.WriteLine($"{i + 1}. {tasks[i]}");
}
i + 1とすることで、人間にとってわかりやすい1番始まりの番号を表示できます。
8-5. 初心者が迷いやすい使い分け
初心者は、forとforeachのどちらを使うべきか迷いやすいです。
基本的には、回数やインデックスを自分で管理したいならfor、コレクションの中身を順番に取り出すだけならforeachと考えるとよいでしょう。
C#// インデックスが必要ならfor
for (int i = 0; i < names.Count; i++)
{
Console.WriteLine($"{i}: {names[i]}");
}
// 要素だけ使えればよいならforeach
foreach (string name in names)
{
Console.WriteLine(name);
}
9. forループとwhile文の違い
9-1. while文は条件が満たされる間だけ繰り返す構文
while文は、条件式がtrueの間、処理を繰り返す構文です。
C#int i = 0;
while (i < 5)
{
Console.WriteLine(i);
i++;
}
このコードは、forループで書くと次のようになります。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
どちらも同じ結果になりますが、書き方が異なります。
9-2. 繰り返し回数が決まっているならforループ
繰り返し回数が決まっている場合は、forループが向いています。
C#for (int i = 0; i < 10; i++)
{
Console.WriteLine("10回繰り返します");
}
初期化、条件、更新が1行にまとまっているため、何回繰り返すのかがわかりやすいです。
9-3. 繰り返し回数が不明ならwhile文
繰り返し回数が事前にわからない場合は、while文が向いています。
C#string input = "";
while (input != "exit")
{
Console.WriteLine("終了するにはexitと入力してください");
input = Console.ReadLine();
}
このコードは、ユーザーがexitと入力するまで繰り返されます。何回繰り返されるかは、実行してみないとわかりません。
9-4. for文・while文・foreach文の使い分け表
| 構文 | 向いている場面 | 例 |
|---|---|---|
| for | 回数が決まっている、インデックスを使いたい | 10回繰り返す、配列を番号付きで処理する |
| while | 回数が決まっていない、条件が満たされる間続けたい | 入力が正しくなるまで繰り返す |
| foreach | コレクションの要素を順番に処理したい | 配列やリストの中身をすべて表示する |
C#の繰り返し処理では、この3つを使い分けることが大切です。
10. C#のforループで初心者がつまずきやすいポイント
10-1. i++の意味がわからない
i++は、変数iの値を1増やすという意味です。
C#i++;
これは次のコードと同じ意味です。
C#i = i + 1;
たとえば、iが0なら、i++の後は1になります。forループでは、処理が1回終わるたびにi++が実行されることが多いです。
10-2. i < 10とi <= 10の違い
i < 10は、iが10より小さい間だけ繰り返します。
C#for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
この場合、表示されるのは0から9までです。
一方、i <= 10は、iが10以下の間だけ繰り返します。
C#for (int i = 0; i <= 10; i++)
{
Console.WriteLine(i);
}
この場合、表示されるのは0から10までです。
配列やリストを扱う場合は、i < 配列.Lengthやi < リスト.Countを使うのが基本です。
10-3. ループ変数の初期値を間違える
ループ変数の初期値を間違えると、期待した回数だけ処理されません。
C#for (int i = 1; i < 5; i++)
{
Console.WriteLine(i);
}
このコードは、1から4まで表示します。0から4まで表示したい場合は、初期値を0にする必要があります。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
何を基準に数えるのかを意識して、初期値を決めましょう。
10-4. 配列の最後の要素でエラーになる
配列の最後の要素でエラーになる原因の多くは、条件式の書き方です。
C#int[] numbers = { 10, 20, 30 };
for (int i = 0; i <= numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
このコードは、numbers[3]にアクセスしようとしてエラーになります。配列のインデックスは0、1、2までだからです。
正しくは次のように書きます。
C#for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
10-5. 無限ループになってしまう
条件式がずっとtrueのままだと、ループが終わりません。
C#for (int i = 0; i < 10; i--)
{
Console.WriteLine(i);
}
このコードでは、iが減り続けるため、i < 10がずっとtrueになります。
正しくは次のようにします。
C#for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
条件式と反復式の方向が合っているかを確認しましょう。
10-6. セミコロンや波括弧の書き忘れ
for文では、丸括弧の中にセミコロンが2つ必要です。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
次のようにセミコロンを忘れると、コンパイルエラーになります。
C#for (int i = 0 i < 5 i++)
{
Console.WriteLine(i);
}
また、処理が複数行ある場合は、波括弧{ }も忘れないようにしましょう。
11. C#のforループのサンプルコード集
11-1. 数値を順番に表示するサンプル
C#for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
実行結果は次のようになります。
1
2
3
4
5
もっとも基本的なforループのサンプルです。
11-2. 配列の中身を表示するサンプル
C#string[] animals = { "犬", "猫", "鳥" };
for (int i = 0; i < animals.Length; i++)
{
Console.WriteLine(animals[i]);
}
配列の要素数にはLengthを使います。
11-3. リストの中身を変更するサンプル
C#List<int> scores = new List<int> { 70, 80, 90 };
for (int i = 0; i < scores.Count; i++)
{
scores[i] += 5;
}
foreach (int score in scores)
{
Console.WriteLine(score);
}
このコードでは、リストの各点数に5点を加算しています。
foreachでは要素を読み取る処理が中心ですが、インデックスを使って中身を変更したい場合はforループが便利です。
11-4. 条件に一致する要素だけ処理するサンプル
C#int[] numbers = { 3, 8, 12, 5, 20 };
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] >= 10)
{
Console.WriteLine(numbers[i]);
}
}
実行結果は次のようになります。
12
20
if文と組み合わせることで、条件に一致する要素だけを処理できます。
11-5. 二重ループを使ったサンプル
C#for (int row = 1; row <= 3; row++)
{
for (int col = 1; col <= 3; col++)
{
Console.Write($"{row},{col} ");
}
Console.WriteLine();
}
実行結果は次のようになります。
1,1 1,2 1,3
2,1 2,2 2,3
3,1 3,2 3,3
行と列を扱うような処理では、二重ループが役立ちます。
12. forループを書くときのベストプラクティス
12-1. ループ変数にはわかりやすい名前を使う
短いループでは、iやjといった変数名がよく使われます。
C#for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
ただし、意味がある場合は、よりわかりやすい名前を使うのもおすすめです。
C#for (int index = 0; index < names.Count; index++)
{
Console.WriteLine(names[index]);
}
二重ループでは、rowやcolのような名前にすると、行と列の意味がわかりやすくなります。
C#for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
Console.WriteLine($"{row}, {col}");
}
}
12-2. 条件式をシンプルに書く
forループの条件式が複雑すぎると、コードが読みにくくなります。
C#for (int i = 0; i < items.Count && items[i] != null && i < maxCount; i++)
{
Console.WriteLine(items[i]);
}
条件が複雑な場合は、ループの中でif文を使ったり、処理をメソッドに分けたりすると読みやすくなります。
12-3. マジックナンバーを避ける
コード中に直接書かれた意味のわかりにくい数値を、マジックナンバーと呼びます。
C#for (int i = 0; i < 365; i++)
{
Console.WriteLine("処理");
}
365という数字の意味がすぐにわからない場合は、変数や定数にすると読みやすくなります。
C#const int DaysInYear = 365;
for (int day = 0; day < DaysInYear; day++)
{
Console.WriteLine("処理");
}
12-4. foreachで十分な場合はforeachを使う
配列やリストの要素を順番に読むだけなら、foreachのほうがシンプルです。
C#foreach (string name in names)
{
Console.WriteLine(name);
}
インデックスが不要な場合に無理にforループを使うと、コードが少し複雑になります。
12-5. 読みやすさを意識して書く
forループは便利ですが、使い方によっては読みにくくなります。
読みやすくするためには、初期値・条件式・反復式をシンプルにする、ループの中の処理を長くしすぎない、ネストを深くしすぎない、必要に応じてメソッドに分ける、といった工夫が大切です。
初心者のうちは、「あとから見ても何をしているかわかるか」を意識して書くとよいでしょう。
13. C#のforループに関するよくある質問
13-1. forループのiは何を意味しますか?
iは、ループの回数や位置を表すためによく使われる変数名です。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
iという名前に特別な機能があるわけではありません。次のように別の名前でも書けます。
C#for (int count = 0; count < 5; count++)
{
Console.WriteLine(count);
}
ただし、プログラミングでは慣習的にiがよく使われます。
13-2. forループは0から始めるべきですか?
配列やリストを扱う場合は、0から始めることが多いです。C#の配列やリストのインデックスは0から始まるためです。
C#for (int i = 0; i < items.Length; i++)
{
Console.WriteLine(items[i]);
}
一方で、1から10までの数字を表示したい場合などは、1から始めても問題ありません。
C#for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
目的に合わせて初期値を決めましょう。
13-3. forループとforeachはどちらを使えばいいですか?
インデックス番号が必要ならforループ、要素を順番に取り出すだけならforeachを使うのがおすすめです。
C#// インデックスが必要
for (int i = 0; i < names.Count; i++)
{
Console.WriteLine($"{i}: {names[i]}");
}
// 要素だけでよい
foreach (string name in names)
{
Console.WriteLine(name);
}
初心者のうちは、まずこの基準で使い分けるとわかりやすいです。
13-4. forループの中で変数を宣言してもよいですか?
はい、forループの中で変数を宣言しても問題ありません。
C#for (int i = 0; i < 5; i++)
{
int doubled = i * 2;
Console.WriteLine(doubled);
}
ただし、ループの中で宣言した変数は、そのループの中でしか使えません。
C#for (int i = 0; i < 5; i++)
{
int value = i;
}
// ここではvalueは使えない
変数をどこで使いたいのかを考えて、宣言する場所を決めましょう。
13-5. C#で無限ループを書くにはどうすればよいですか?
C#で無限ループを書く場合、for文では次のように書けます。
C#for (;;)
{
Console.WriteLine("無限ループ");
}
また、while文を使って次のように書くこともできます。
C#while (true)
{
Console.WriteLine("無限ループ");
}
ただし、無限ループを書く場合は、どこかでbreakする条件を用意することが多いです。
C#while (true)
{
string input = Console.ReadLine();
if (input == "exit")
{
break;
}
}
終了条件がない無限ループは、プログラムが止まらなくなる原因になるため注意しましょう。
13-6. forループを途中で止めるにはどうすればよいですか?
forループを途中で止めるには、breakを使います。
C#for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}
Console.WriteLine(i);
}
このコードでは、iが5になった時点でループが終了します。
特定の条件になったら処理を終えたい場合に、breakはよく使われます。
まとめ
C#のforループは、決まった回数だけ処理を繰り返したいときに使う基本的な構文です。英語では「C# for loop」と呼ばれ、C#を学ぶうえで必ず理解しておきたい重要なテーマです。
基本形は次のとおりです。
C#for (int i = 0; i < 回数; i++)
{
繰り返したい処理;
}
for文では、初期化式、条件式、反復式の3つを使って繰り返しを制御します。配列ではLength、リストではCountを使い、i < 配列.Lengthやi < リスト.Countのように書くことで、範囲外アクセスを防ぎやすくなります。
また、breakを使えばループを途中終了でき、continueを使えば特定の回だけ処理をスキップできます。二重ループを使えば、表や行列のようなデータも扱えます。
for、foreach、whileはそれぞれ役割が異なります。繰り返し回数が決まっているならfor、要素を順番に取り出すだけならforeach、繰り返し回数が事前にわからないならwhileを使うとよいでしょう。
C#のforループは、最初は少し難しく感じるかもしれません。しかし、基本の形と処理の流れを理解すれば、配列やリストの処理、合計値の計算、条件付きの繰り返しなど、さまざまな場面で使えるようになります。まずは簡単なサンプルコードを実際に書きながら、少しずつ慣れていきましょう。

