C#のfor文をbreakで抜ける方法|ループ中断の使い方と注意点を初心者向けに解説

はじめに

C#で繰り返し処理を書くときによく使うのがfor文です。for文は、指定した回数だけ同じ処理を繰り返したい場合に便利ですが、実際のプログラムでは「条件を満たしたら途中でループを終わらせたい」という場面もよくあります。

そのようなときに使うのがbreakです。

この記事では、C#のfor文をbreakで抜ける方法について、基本構文から具体例、continuereturnとの違い、ネストしたループでの注意点まで初心者向けに解説します。

1. C#のfor文でbreakを使うと何ができる?

1-1. breakはループ処理を途中で終了する命令

breakは、ループ処理を途中で終了するための命令です。

C#では、for文、while文、do while文、foreach文などのループの中でbreakを使えます。breakが実行されると、その時点でループ処理は終了し、ループの次に書かれている処理へ移動します。

C#
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}

Console.WriteLine(i);
}

Console.WriteLine("ループ終了");

このコードでは、i5になった時点でbreakが実行されます。そのため、画面に表示されるのは0から4までです。

0
1
2
3
4
ループ終了

breakを使うことで、繰り返し回数が残っていても、必要なタイミングでループを中断できます。

1-2. for文でbreakが必要になる主な場面

for文でbreakが必要になるのは、主に次のような場面です。

たとえば、配列やリストの中から特定の値を探す場合、目的の値が見つかったあとも最後までループを続ける必要はありません。見つかった時点でbreakすれば、無駄な処理を減らせます。

C#
int[] numbers = { 10, 20, 30, 40, 50 };

for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == 30)
{
Console.WriteLine("30が見つかりました");
break;
}
}

また、ユーザー入力や計算結果によって処理を中断したい場合にもbreakは使われます。

「条件を満たしたら終了する」「エラーが発生したら処理を止める」「目的のデータが見つかったら検索を終える」といった処理で、breakはよく使われます。

1-3. continueやreturnとの違い

breakと似たものに、continuereturnがあります。

breakはループそのものを終了します。一方、continueは現在の繰り返し処理だけをスキップして、次の繰り返しに進みます。

C#
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
continue;
}

Console.WriteLine(i);
}

この場合、i2のときだけConsole.WriteLine(i);が実行されず、ループ自体は続きます。

出力結果は次のようになります。

0
1
3
4

一方、returnはメソッド自体を終了します。ループだけでなく、そのメソッドの処理全体から抜けたい場合に使います。

C#
void Test()
{
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
return;
}

Console.WriteLine(i);
}

Console.WriteLine("この行は実行されません");
}

breakcontinuereturnは似ていますが、処理がどこまで終了するかが異なります。

2. C#のfor文をbreakで抜ける基本構文

2-1. for文とbreakの基本的な書き方

C#のfor文でbreakを使う基本構文は次のとおりです。

C#
for (初期化; 条件式; 更新処理)
{
if (終了したい条件)
{
break;
}

// 繰り返したい処理
}

breakは通常、if文と組み合わせて使います。ある条件を満たしたときだけループを終了したいからです。

C#
for (int i = 0; i < 10; i++)
{
if (i == 3)
{
break;
}

Console.WriteLine(i);
}

このコードでは、i3になった時点でループを抜けます。

2-2. 条件に一致したらbreakするサンプルコード

次の例では、数値が7になったらループを終了します。

C#
for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);

if (i == 7)
{
break;
}
}

出力結果は次のようになります。

1
2
3
4
5
6
7

for文の条件式ではi <= 10と書かれていますが、i == 7のときにbreakされるため、8以降は表示されません。

このように、for文の条件式とは別に、ループを途中で終わらせる条件を書けるのがbreakの特徴です。

2-3. break後に処理がどこへ移動するか

breakが実行されると、ループの中に残っている処理は実行されません。処理は、ループの直後に移動します。

C#
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
break;
}

Console.WriteLine("ループ内: " + i);
}

Console.WriteLine("ループの外");

出力結果は次のとおりです。

ループ内: 0
ループ内: 1
ループの外

i2になった時点でbreakが実行されるため、Console.WriteLine("ループ内: " + i);は実行されません。その後、ループの外にあるConsole.WriteLine("ループの外");が実行されます。

3. for文の中でbreakを使う具体例

3-1. 指定した値が見つかったらループを終了する

配列の中から指定した値を探す処理では、値が見つかった時点でループを終了できます。

C#
int[] numbers = { 3, 8, 12, 20, 25 };
int target = 12;

for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == target)
{
Console.WriteLine(target + "が見つかりました");
break;
}
}

このコードでは、numbers[i]targetと一致した時点でメッセージを表示し、breakでループを終了します。

もしbreakを書かない場合、目的の値が見つかったあとも配列の最後まで処理が続きます。小さな配列では大きな差はありませんが、データ件数が多い場合は無駄な処理を減らす効果があります。

3-2. 配列やリストの検索処理でbreakを使う

List<T>でもbreakは同じように使えます。

C#
List<string> names = new List<string>
{
"Sato",
"Suzuki",
"Takahashi",
"Tanaka"
};

for (int i = 0; i < names.Count; i++)
{
if (names[i] == "Takahashi")
{
Console.WriteLine("Takahashiさんが見つかりました");
break;
}
}

リストの要素数はnames.Countで取得します。配列の場合はLength、リストの場合はCountを使う点に注意しましょう。

検索処理では、「見つかったら終了する」という流れが自然なので、breakとの相性がよいです。

3-3. 入力値や条件によって処理を中断する

ユーザー入力を受け取りながら処理を繰り返す場合にも、breakを使えます。

C#
for (int i = 0; i < 5; i++)
{
Console.Write("文字を入力してください。終了する場合は q を入力: ");
string input = Console.ReadLine();

if (input == "q")
{
Console.WriteLine("入力を終了します");
break;
}

Console.WriteLine("入力された文字: " + input);
}

このコードでは、最大5回まで入力できますが、ユーザーがqを入力すると、その時点でループが終了します。

for文の回数制限とbreakによる中断条件を組み合わせることで、「最大回数は決まっているが、途中終了もできる」処理を作れます。

3-4. 無限ループをbreakで抜ける

for文では、条件式を省略して無限ループを書くこともできます。

C#
for (;;)
{
Console.WriteLine("処理中...");

Console.Write("終了しますか? y/n: ");
string input = Console.ReadLine();

if (input == "y")
{
break;
}
}

Console.WriteLine("終了しました");

for (;;)は、条件式がないため、そのままだと永遠に繰り返されます。そのため、無限ループを書く場合は、必ずどこかでbreakできる条件を用意する必要があります。

無限ループは便利ですが、break条件を書き忘れるとプログラムが終わらなくなるため注意が必要です。

4. ネストしたfor文でbreakを使うときの注意点

4-1. breakで抜けられるのは内側のループだけ

for文の中にさらにfor文を書くことを、ネストしたfor文、または二重ループと呼びます。

ネストしたループでbreakを使う場合、breakで抜けられるのは、基本的にそのbreakが書かれている一番内側のループだけです。

C#
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (j == 1)
{
break;
}

Console.WriteLine($"i={i}, j={j}");
}
}

このコードでは、j == 1になったときに内側のfor文だけが終了します。外側のfor文は続くため、iのループは最後まで実行されます。

出力結果は次のようになります。

i=0, j=0
i=1, j=0
i=2, j=0

breakを書いたからといって、すべてのループから抜けるわけではありません。

4-2. 外側のfor文まで抜けたい場合の考え方

二重ループで外側のfor文まで抜けたい場合は、少し工夫が必要です。

C#のbreakは、ラベル付きbreakのように任意の外側ループを直接指定して抜ける機能を持っていません。そのため、外側のループも終了したい場合は、次のような方法を使います。

1つ目は、フラグ変数を使う方法です。

2つ目は、処理をメソッドに分けてreturnで抜ける方法です。

どちらを使うかは、処理の複雑さや読みやすさによって判断します。

4-3. フラグ変数を使って二重ループを抜ける方法

フラグ変数を使うと、内側のループで条件を満たしたことを外側のループに伝えられます。

C#
bool found = false;

for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (i == 1 && j == 1)
{
found = true;
break;
}

Console.WriteLine($"i={i}, j={j}");
}

if (found)
{
break;
}
}

Console.WriteLine("ループ終了");

このコードでは、内側のループで条件に一致したらfoundtrueにして、まず内側のループをbreakします。

その後、外側のループ側でもfoundを確認し、trueであれば外側のループもbreakします。

二重ループでは、breakだけで外側のループまで抜けられると誤解しやすいため、フラグ変数を使って明示的に制御するのがポイントです。

4-4. メソッド化やreturnで処理を整理する方法

二重ループの処理が複雑な場合は、メソッドに分けてreturnで抜ける方法もあります。

C#
void Search()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (i == 1 && j == 1)
{
Console.WriteLine("見つかりました");
return;
}

Console.WriteLine($"i={i}, j={j}");
}
}

Console.WriteLine("見つかりませんでした");
}

returnはループではなくメソッド全体を終了します。そのため、内側のループだけでなく外側のループからも抜けられます。

ただし、returnを使うとメソッドの処理全体が終了するため、その後に実行したい処理がある場合は注意が必要です。

複雑な二重ループでは、無理にbreakだけで制御しようとせず、メソッドを分けて処理を読みやすくすることも大切です。

5. breakとcontinueの違いを初心者向けに解説

5-1. breakはループを終了する

breakは、ループ処理を完全に終了します。

C#
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
break;
}

Console.WriteLine(i);
}

出力結果は次のとおりです。

0
1

i2になった時点でループが終了するため、2以降の処理は行われません。

5-2. continueは現在の処理だけスキップする

continueは、現在の繰り返し処理だけをスキップして、次の繰り返しに進みます。

C#
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
continue;
}

Console.WriteLine(i);
}

出力結果は次のようになります。

0
1
3
4

i2のときだけ表示処理がスキップされますが、ループ自体は続きます。

5-3. breakとcontinueの使い分け例

breakcontinueは、目的によって使い分けます。

「もうこれ以上ループを続ける必要がない」場合はbreakを使います。

C#
int[] numbers = { 1, 3, 5, 8, 9 };

for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == 8)
{
Console.WriteLine("8が見つかりました");
break;
}
}

一方、「今回だけ処理を飛ばして、次のループは続けたい」場合はcontinueを使います。

C#
for (int i = 1; i <= 5; i++)
{
if (i % 2 == 0)
{
continue;
}

Console.WriteLine(i);
}

このコードでは、偶数のときだけ表示をスキップし、奇数だけを表示します。

1
3
5

breakは終了、continueはスキップと覚えると分かりやすいです。

5-4. 間違えやすいコード例と修正方法

初心者が間違えやすいのは、本当はcontinueを使うべき場面でbreakを書いてしまうケースです。

C#
for (int i = 1; i <= 5; i++)
{
if (i % 2 == 0)
{
break;
}

Console.WriteLine(i);
}

このコードは、偶数をスキップしたい意図で書いたとしても、i2になった時点でループが終了してしまいます。

出力結果は次のようになります。

1

偶数だけをスキップしたい場合は、breakではなくcontinueを使います。

C#
for (int i = 1; i <= 5; i++)
{
if (i % 2 == 0)
{
continue;
}

Console.WriteLine(i);
}

修正後は、奇数だけが表示されます。

1
3
5

ループを完全に終わらせたいのか、今回だけ飛ばしたいのかを考えて使い分けましょう。

6. for文でbreakを使うときの注意点

6-1. break条件を書き忘れると意図しない処理になる

breakは便利ですが、終了条件を書き忘れると意図しない処理になることがあります。

特に無限ループでは注意が必要です。

C#
for (;;)
{
Console.WriteLine("処理中...");
}

このコードは、終了条件がないため永遠に実行されます。

無限ループを書く場合は、必ずbreakできる条件を用意しましょう。

C#
for (;;)
{
Console.Write("終了する場合は exit と入力: ");
string input = Console.ReadLine();

if (input == "exit")
{
break;
}
}

break条件が正しく書かれているか、条件が本当に成立する可能性があるかを確認することが大切です。

6-2. breakを多用するとコードが読みにくくなる

breakを使うと処理を途中で抜けられるため便利ですが、多用するとコードの流れが分かりにくくなることがあります。

C#
for (int i = 0; i < 100; i++)
{
if (i == 10)
{
break;
}

if (i % 3 == 0)
{
break;
}

if (i > 50)
{
break;
}

Console.WriteLine(i);
}

このように複数のbreakがあると、どの条件でループが終了するのか分かりにくくなります。

条件をまとめられる場合は、次のように整理すると読みやすくなります。

C#
for (int i = 0; i < 100; i++)
{
if (i == 10 || i % 3 == 0 || i > 50)
{
break;
}

Console.WriteLine(i);
}

ただし、条件をまとめすぎると逆に読みにくくなる場合もあります。大切なのは、後から読んだ人が処理の流れを理解しやすいかどうかです。

6-3. ループ終了後の変数の値に注意する

breakでループを抜けたあと、ループ変数の値を使う場合は注意が必要です。

C#
int i;

for (i = 0; i < 5; i++)
{
if (i == 3)
{
break;
}
}

Console.WriteLine(i);

このコードでは、i3になった時点でbreakされるため、出力結果は3です。

一方、最後までループが実行された場合は、iの値は条件式を満たさなくなった値になります。

C#
int i;

for (i = 0; i < 5; i++)
{
Console.WriteLine(i);
}

Console.WriteLine("終了後のi: " + i);

この場合、最後に表示されるi5です。

breakで途中終了したのか、条件式によって自然に終了したのかによって、ループ後の変数の値が変わることを理解しておきましょう。

6-4. 条件式とbreak条件の役割を混同しない

for文には、もともとループを続けるかどうかを判定する条件式があります。

C#
for (int i = 0; i < 10; i++)
{
// 処理
}

この場合、i < 10がループの継続条件です。

一方、breakはループの途中で追加の終了条件を作るために使います。

C#
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}

Console.WriteLine(i);
}

このコードでは、i < 10という条件に加えて、i == 5になったら終了するという条件があります。

単純な終了条件であれば、for文の条件式に書いたほうが分かりやすい場合もあります。

C#
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}

breakを使うべきか、for文の条件式で表現できるかを考えると、読みやすいコードを書きやすくなります。

7. breakを使わないほうがよいケース

7-1. for文の条件式で終了条件を書ける場合

終了条件がシンプルで、最初から分かっている場合は、breakを使わずにfor文の条件式で書くほうが自然です。

たとえば、i5未満の間だけ処理したい場合、次のように書けます。

C#
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}

わざわざ次のように書く必要はありません。

C#
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}

Console.WriteLine(i);
}

どちらも結果は似ていますが、前者のほうがループの終了条件が分かりやすいです。

breakは、ループの途中でしか判断できない条件がある場合に使うと効果的です。

7-2. LINQや配列メソッドで置き換えられる場合

C#では、配列やリストに対してLINQを使うことで、ループを書かずに処理できる場合があります。

たとえば、リストの中に特定の値が含まれているか確認するだけなら、Containsを使えます。

C#
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

if (numbers.Contains(3))
{
Console.WriteLine("3が含まれています");
}

また、条件に一致する最初の要素を取得したい場合は、FirstOrDefaultを使えます。

C#
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

int result = numbers.FirstOrDefault(n => n > 3);

Console.WriteLine(result);

検索や判定の処理では、必ずしもfor文とbreakを使う必要はありません。

ただし、初心者のうちは、まずfor文とbreakの動きを理解することが大切です。そのうえで、LINQを使うとより簡潔に書ける場面があると覚えておくとよいでしょう。

7-3. 可読性を優先して処理を分けたほうがよい場合

breakを使うことで1つのループ内に多くの処理を詰め込んでしまうと、コードが読みにくくなることがあります。

たとえば、検索、判定、表示、エラー処理などをすべて1つのfor文に書くと、何をしている処理なのか分かりにくくなります。

そのような場合は、処理をメソッドに分けると読みやすくなります。

C#
bool ExistsTarget(int[] numbers, int target)
{
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == target)
{
return true;
}
}

return false;
}

このようにメソッド化すると、「指定した値が存在するか調べる処理」であることが分かりやすくなります。

breakを使うこと自体が悪いわけではありません。大切なのは、コード全体が読みやすく、意図が伝わりやすいかどうかです。

8. C#のfor文とbreakに関するよくある質問

8-1. breakを書くとエラーになる原因は?

breakは、ループ文またはswitch文の中で使う命令です。そのため、通常のif文の中だけにbreakを書くとエラーになります。

C#
if (true)
{
break;
}

このコードはエラーになります。breakの外側に、for文やwhile文、foreach文、またはswitch文がないためです。

正しくは、次のようにループの中で使います。

C#
for (int i = 0; i < 10; i++)
{
if (i == 3)
{
break;
}
}

breakを書く場所は、必ずループまたはswitch文の内側である必要があります。

8-2. if文の中でbreakは使える?

if文の中でもbreakは使えます。ただし、そのif文がループやswitch文の中にある場合に限ります。

C#
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}

Console.WriteLine(i);
}

このように、for文の中にあるif文であれば、breakは使えます。

一方、ループの外にあるif文だけではbreakは使えません。

C#
if (true)
{
// break; // エラー
}

if文の中で使えるかどうかではなく、外側に抜ける対象のループやswitch文があるかどうかが重要です。

8-3. foreach文でもbreakは使える?

foreach文でもbreakは使えます。

C#
string[] names = { "Sato", "Suzuki", "Tanaka" };

foreach (string name in names)
{
if (name == "Suzuki")
{
Console.WriteLine("Suzukiさんが見つかりました");
break;
}
}

foreach文は、配列やリストなどの要素を順番に取り出すときに便利です。

特定の要素が見つかった時点で処理を終了したい場合は、foreach文でもbreakを使えます。

8-4. switch文のbreakとの違いは?

breakfor文だけでなく、switch文でも使われます。

C#
int number = 1;

switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
default:
Console.WriteLine("その他です");
break;
}

switch文のbreakは、該当するcaseの処理を終えてswitch文から抜けるために使います。

一方、for文のbreakはループ処理を終了するために使います。

どちらも「現在の制御構造から抜ける」という意味では同じですが、抜ける対象が異なります。

for文の中にswitch文がある場合は、どのbreakが何から抜けるのかに注意が必要です。

C#
for (int i = 0; i < 3; i++)
{
switch (i)
{
case 1:
Console.WriteLine("switchを抜けます");
break;
}

Console.WriteLine("for文は続きます");
}

この場合、switch文の中のbreakswitch文を抜けるだけで、for文は終了しません。

8-5. breakした後にループを再開できる?

一度breakで抜けたループを、その続きから再開することはできません。

C#
for (int i = 0; i < 10; i++)
{
if (i == 3)
{
break;
}

Console.WriteLine(i);
}

このコードでは、i == 3でループが完全に終了します。その後、i == 4から再開することはありません。

もし「今回だけ処理を飛ばして次に進みたい」のであれば、breakではなくcontinueを使います。

C#
for (int i = 0; i < 10; i++)
{
if (i == 3)
{
continue;
}

Console.WriteLine(i);
}

breakは終了、continueは次の繰り返しへ進む命令です。ループを再開したいのか、完全に終わらせたいのかを考えて使い分けましょう。

まとめ

C#のfor文では、breakを使うことでループ処理を途中で終了できます。

breakは、指定した値が見つかったとき、ユーザー入力によって処理を止めたいとき、無限ループから抜けたいときなどに便利です。

基本的な書き方は、for文の中でif文を使い、終了したい条件を満たしたときにbreakを書く形です。

C#
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}

Console.WriteLine(i);
}

ただし、breakで抜けられるのは基本的に一番内側のループだけです。ネストしたfor文で外側のループまで抜けたい場合は、フラグ変数を使う方法や、メソッド化してreturnを使う方法を検討しましょう。

また、breakcontinueの違いも重要です。breakはループを終了し、continueは現在の処理だけをスキップして次の繰り返しに進みます。

C#でfor文とbreakを正しく使えるようになると、検索処理や条件付きの繰り返し処理を効率よく書けるようになります。終了条件が明確で読みやすいコードになるように、必要な場面で適切にbreakを使いましょう。