C#でのプログラミングでは、同じ処理を何度も繰り返したい場面がたくさんあります。
その代表的な構文がfor文です。
本記事では、C#のfor文の基本構造から、よくある書き方、ありがちなミスまで、サンプルコードと図解を交えながら丁寧に解説します。
初心者の方でも読みながら手を動かせば、自然と繰り返し処理の仕組みが理解できる内容になっています。
【C#】for文とは?役割と基本イメージ

C#のfor文は、「回数があらかじめ決まっている繰り返し」を表現するのに最もよく使われる構文です。
例えば、「1から10までの数字を順番に表示したい」「配列の先頭から最後まで順に処理したい」といった場面では、for文を使うことでコードを短く、そして読みやすく書くことができます。
C#のfor文は、次の3つの要素から構成されます。
- 初期化(カウンタの準備)
- 条件式(続けるかどうかの判定)
- 更新式(カウンタの増減)
これらを1行にまとめて、繰り返したい処理のブロック{ ... }を書きます。
for文の基本構文
基本形の書き方
C#のfor文の一般的な書き方は次の通りです。
for (初期化; 条件式; 更新式)
{
// 繰り返したい処理をここに書きます
}
それぞれの部分の意味を簡単に説明すると、次のようになります。
- 初期化: ループを始める前に、カウンタ変数を設定する場所
- 条件式: ループを続けるかどうかを判定する式(真(true)なら続行、偽(false)なら終了)
- 更新式: 1回分の繰り返しが終わるたびに、カウンタを増やしたり減らしたりする式
もっとも基本的なサンプルコード
1から5までの数字を表示するサンプルを見てみます。
using System;
class Program
{
static void Main()
{
// for文で1〜5までの数字を表示するサンプル
// iを1で初期化
// i <= 5 の間ループを続ける
// 1回ループするごとに i++ でiを1増やす
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i); // iの値を表示
}
}
}
1
2
3
4
5
この例のように、決まった回数の繰り返しを行いたいときには、for文が最も分かりやすい選択になります。
for文の処理の流れを詳細に理解する

実行順序の詳しい説明
for文は、見た目は1行ですが、内部的には次の順番で処理が進みます。
- 初期化を1回だけ実行する
- 条件式を評価する
- 条件式が
trueならブロック内の処理を実行する - 更新式を実行する
- 2に戻る(条件式を再び評価する)
- 条件式が
falseになったらループを抜ける
この流れをコードと一緒に追いかけてみましょう。
using System;
class Program
{
static void Main()
{
// for文の流れを追いやすくするサンプル
for (int i = 1; i <= 3; i++)
{
Console.WriteLine("ループ開始時のi: " + i);
}
}
}
ループ開始時のi: 1
ループ開始時のi: 2
ループ開始時のi: 3
このときの内部的な動きは次のようになります。
- 最初に
int i = 1;が実行される(初期化) i <= 3を判定し、真なのでブロック内を実行- ブロック終了後に
i++でiが1増える - ふたたび
i <= 3を判定する
「条件の判定はブロックに入る前」に毎回行われることがポイントです。
よく使うパターンと実用的な例
インデックスを使った配列のループ

配列を順番に処理したい場合、for文は非常に相性が良いです。
次の例では、文字列の配列をfor文で回して表示しています。
using System;
class Program
{
static void Main()
{
// 配列の要素をfor文で順番に表示するサンプル
string[] fruits = { "Apple", "Banana", "Cherry" };
// iは0からスタートし、iが配列の長さより小さい間ループする
for (int i = 0; i < fruits.Length; i++)
{
// インデックスiを使って要素を取り出す
Console.WriteLine("fruits[" + i + "] = " + fruits[i]);
}
}
}
fruits[0] = Apple
fruits[1] = Banana
fruits[2] = Cherry
ここでのポイントは次の2つです。
- 配列のインデックスは
0から始まるため、初期値は0 - 条件式は
i < fruits.Lengthとし、範囲外アクセスを防ぐ
配列のループではi = 0からi < Lengthまでというパターンを基本形として覚えておくと便利です。
逆順ループ(カウンタを減らしていく)

カウンタを増やすだけでなく、減らしていく書き方もよく使います。
例えば、数字を5から1へ向かって表示する場合です。
using System;
class Program
{
static void Main()
{
// 5から1まで逆順にカウントダウンするサンプル
for (int i = 5; i >= 1; i--)
{
Console.WriteLine(i);
}
}
}
5
4
3
2
1
このように、初期値・条件式・更新式を工夫することで、さまざまなパターンの繰り返しが表現できます。
合計値を求める(累積の例)
for文は、何かを「少しずつ足し合わせていく」処理とも相性が良いです。
1から10までの合計を求める例を見てみましょう。
using System;
class Program
{
static void Main()
{
// 1〜10までの合計を求めるサンプル
int sum = 0; // 合計値を保存しておく変数
for (int i = 1; i <= 10; i++)
{
sum += i; // sum = sum + i; と同じ意味
}
Console.WriteLine("1〜10の合計は " + sum + " です。");
}
}
1〜10の合計は 55 です。
このように、for文は「カウンタ」と「累積用の変数」を組み合わせることで、さまざまな集計処理に使えます。
for文の各部分を細かくカスタマイズする
初期化・条件式・更新式を分解して理解する
for文の3つの部分は、すべて「省略可能」という特徴があります。
ただし、省略のしすぎは読みづらさの原因にもなるため、目的を明確にして使い分けることが重要です。
初期化を省略する例
すでに宣言済みの変数を使いたいときは、初期化部分を省略することができます。
using System;
class Program
{
static void Main()
{
int i = 0; // 事前に宣言・初期化しておく
// forの初期化部分を空にして、セミコロンだけ書く
for ( ; i < 3; i++)
{
Console.WriteLine(i);
}
}
}
0
1
2
更新式を複雑にする例(2ずつ増やすなど)
更新式はi++だけでなく、さまざまな書き方が可能です。
using System;
class Program
{
static void Main()
{
// iを2ずつ増やしていくサンプル
for (int i = 0; i <= 10; i += 2)
{
Console.WriteLine(i);
}
}
}
0
2
4
6
8
10
このように、更新式ではi--やi += 2などを使い分けることができます。
無限ループとしてのfor文
条件式を省略したfor文は、無限ループになります。
using System;
class Program
{
static void Main()
{
// 非推奨: 無限ループのサンプル
// 強制終了するまで終わりません
for (;;)
{
Console.WriteLine("永遠に実行されます...");
break; // 実際にはbreakで抜けるなどの仕組みが必要です
}
}
}
永遠に実行されます...
条件式を省略すると、常にtrueとみなされるため、意図せず無限ループにならないよう注意が必要です。
break文とcontinue文でループを制御する

break文でループ全体を抜ける
for文の途中で、ある条件を満たしたらループ自体を終了したい場合にはbreakを使います。
using System;
class Program
{
static void Main()
{
// 1〜10の中で、最初に5より大きい数が見つかったらそこで終了するサンプル
for (int i = 1; i <= 10; i++)
{
if (i > 5)
{
Console.WriteLine("最初に5より大きい数: " + i);
break; // ここでforループを抜ける
}
Console.WriteLine("チェック中: " + i);
}
}
}
チェック中: 1
チェック中: 2
チェック中: 3
チェック中: 4
チェック中: 5
最初に5より大きい数: 6
breakは「ループそのものを終了する」命令であることを覚えておきましょう。
continue文で今回だけスキップする
continueは、現在の1回分のループ処理だけをスキップして、次のループに進みたいときに使います。
using System;
class Program
{
static void Main()
{
// 1〜10のうち、偶数だけを表示するサンプル
for (int i = 1; i <= 10; i++)
{
// iが奇数のときはスキップ
if (i % 2 == 1)
{
continue; // ここから下の処理を飛ばして、次のiへ
}
Console.WriteLine("偶数: " + i);
}
}
}
偶数: 2
偶数: 4
偶数: 6
偶数: 8
偶数: 10
breakとcontinueを使い分けることで、ループの制御が柔軟になります。
ありがちなミスと注意点
条件式の不備による無限ループ
for文で最も多い失敗例のひとつが、条件式や更新式の書き間違いによる無限ループです。
// 悪い例(無限ループになる)
for (int i = 0; i < 10; )
{
Console.WriteLine(i);
// iを更新していないため、iはずっと0のまま
}
このコードは、iが増えないため、i < 10がずっとtrueのままになり、ループが終わりません。
条件式と更新式はセットで確認する習慣をつけると、このようなミスをかなり減らすことができます。
境界条件のミス(<= と < の違い)
配列を扱うときに特に多いのが、<=と<の使い分けミスです。
string[] items = { "A", "B", "C" };
// 悪い例: i <= items.Length にしてしまうと、範囲外アクセスになる
for (int i = 0; i <= items.Length; i++)
{
// i が3になったときに items[3] でエラー
Console.WriteLine(items[i]);
}
配列のインデックスは0からLength - 1までですので、必ずi < items.Lengthと書くようにしましょう。
他のループ構文との違い(while文・foreach文)
while文との違い
for文とwhile文は、どちらも「条件を満たしている間ループする」構文です。
ただし、カウンタの初期化や更新を1行にまとめられるかどうかという違いがあります。
// for文
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
// 同じ意味のwhile文
int j = 0;
while (j < 10)
{
Console.WriteLine(j);
j++;
}
「回数がはっきりしている」場合はfor文、「いつ終わるか条件次第」の場合はwhile文を選ぶと、コードの意図が伝わりやすくなります。
foreach文との違い
配列やリストなどの全要素を順番に処理するときは、foreach文を使うこともできます。
string[] fruits = { "Apple", "Banana", "Cherry" };
// foreach文の例
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
インデックスが不要で、単に全要素を順に処理したいだけならforeach文、「何番目の要素か」も必要ならfor文、というように使い分けると良いです。
まとめ
本記事では、C#のfor文について、基本構文から実用的な書き方、さらにbreak・continueを使った制御方法までを解説しました。
for文は「初期化」「条件式」「更新式」を1行にまとめて書ける、回数指定型の繰り返し構文です。
配列のループや合計値の計算など、現場でも頻出するパターンばかりですので、サンプルを実際に書いて動かしながら慣れていくことをおすすめします。
while文やforeach文との違いも意識しつつ、状況に応じて最適なループ構文を選べるようになれば、C#でのコーディングが格段にスムーズになります。
