C#のbreakはif文で使える?条件分岐でループを抜ける正しい書き方を解説

はじめに

C#を学び始めると、ループ処理の中でよく登場するのがbreak文です。特に、if文と組み合わせて「条件を満たしたら処理を止めたい」「特定の値が見つかったらループを抜けたい」と考える場面は多くあります。

しかし、ここで混乱しやすいのが「C#のbreakif文で使えるのか?」という点です。結論からいうと、breakif文そのものを抜けるための命令ではありません。ただし、for文、while文、foreach文、switch文の中にあるif文であれば、条件分岐によってbreakを実行できます。

この記事では、C#におけるbreakifの関係、正しい書き方、continuereturnとの違い、よくある間違いまで、初心者にもわかりやすく解説します。

1. C#のbreakはif文で使える?まず結論を解説

C#のbreak文は、ループ処理やswitch文を途中で終了するために使います。if文と一緒に使われることは多いですが、if文そのものを終了するための命令ではありません。

たとえば、次のようなコードはよく使われます。

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

Console.WriteLine(i);
}

このコードでは、i5になったときにif文の中でbreakが実行され、forループ全体を抜けます。つまり、breakが終了させるのはif文ではなく、if文を含んでいるループです。

1-1. breakはif文単体を抜けるための命令ではない

C#のbreakは、if文だけを抜けるためには使えません。

次のようなイメージでbreakを使おうとすると、誤解が生まれます。

C#
if (条件)
{
break;
}

このコードが単独で書かれている場合、C#ではコンパイルエラーになります。なぜなら、breakは抜ける対象として、ループ文またはswitch文が必要だからです。

if文は条件によって処理を分岐する構文であり、「繰り返し」や「選択ブロック全体の終了」を管理する構文ではありません。そのため、breakif文だけを終了することはできません。

1-2. if文の中にbreakを書くことはできるが条件がある

if文の中にbreakを書くこと自体は可能です。ただし、そのif文がループ文またはswitch文の中にある必要があります。

たとえば、次のコードは正しい書き方です。

C#
while (true)
{
string input = Console.ReadLine();

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

Console.WriteLine("入力値: " + input);
}

この例では、whileループの中にif文があり、入力値が"exit"だった場合にbreakでループを終了しています。

つまり、C#でif文の中にbreakを書ける条件は、「そのbreakが抜ける対象となるループ文またはswitch文の内側にあること」です。

1-3. breakで抜けられるのはループ文またはswitch文

C#のbreakで抜けられる主な構文は次のとおりです。

構文breakで抜けられるか
for文抜けられる
while文抜けられる
do-while文抜けられる
foreach文抜けられる
switch文抜けられる
if文単体抜けられない

breakは、最も近い外側のループ文またはswitch文を終了します。if文の中に書かれていても、breakの対象はif文ではありません。

1-4. 「ifで条件判定してbreakする」がよく使われる理由

C#では、「特定の条件を満たしたらループを終了する」という処理が非常によくあります。

たとえば、次のような場面です。

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

foreach (int number in numbers)
{
if (number % 2 == 0)
{
Console.WriteLine("偶数が見つかりました");
break;
}
}

このコードでは、偶数が見つかった時点でそれ以上の検索を行う必要がないため、breakforeachループを終了しています。

このように、if文は「終了するかどうかの条件判定」を担当し、break文は「ループやswitchを終了する処理」を担当します。役割を分けて考えると理解しやすくなります。

2. C#のbreak文の基本構文と役割

break文は、現在実行中のループ文またはswitch文を途中で終了するための制御文です。通常、条件分岐であるif文と組み合わせて使われることが多くあります。

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

break文の基本構文は非常にシンプルです。

C#
break;

breakの後にはセミコロンを付けます。

ただし、breakはどこにでも書けるわけではありません。基本的には次のような構文の中で使います。

C#
for (...)
{
break;
}
C#
while (...)
{
break;
}
C#
foreach (...)
{
break;
}
C#
switch (...)
{
case ...:
break;
}

breakが実行されると、その時点で対象のループまたはswitch文の処理は終了し、直後の処理へ移動します。

2-2. for文でbreakを使う例

for文では、繰り返しの途中で条件を満たした場合にbreakを使ってループを終了できます。

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

Console.WriteLine(i);
}

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

実行結果は次のようになります。

0
1
2
3
ループ終了

i4になった時点でbreakが実行されるため、Console.WriteLine(i);は実行されません。その後、for文の外にあるConsole.WriteLine("ループ終了");へ処理が移ります。

2-3. while文でbreakを使う例

while文でもbreakを使って、条件に応じてループを終了できます。

C#
int count = 0;

while (true)
{
if (count == 3)
{
break;
}

Console.WriteLine(count);
count++;
}

Console.WriteLine("while終了");

実行結果は次のとおりです。

0
1
2
while終了

while (true)は無限ループですが、count == 3になったときにbreakが実行されるため、無限に処理が続くことはありません。

2-4. foreach文でbreakを使う例

foreach文では、配列やリストの要素を順番に処理している途中で、条件に一致したらbreakできます。

C#
string[] names = { "佐藤", "鈴木", "田中", "高橋" };

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

Console.WriteLine(name);
}

実行結果は次のようになります。

佐藤
鈴木
田中さんが見つかりました

"田中"が見つかった時点でbreakされるため、"高橋"は処理されません。

2-5. switch文でbreakを使う例

switch文では、各caseの処理を終了するためにbreakを使います。

C#
int score = 2;

switch (score)
{
case 1:
Console.WriteLine("低い");
break;

case 2:
Console.WriteLine("普通");
break;

case 3:
Console.WriteLine("高い");
break;

default:
Console.WriteLine("不明");
break;
}

実行結果は次のとおりです。

普通

case 2の処理が実行されたあと、breakによってswitch文全体を抜けます。

3. if文の中でbreakを使ってループを抜ける正しい書き方

C#でif文とbreakを組み合わせる場合は、「ループの中で条件を判定し、条件を満たしたらループを抜ける」という形が基本です。

3-1. if文で条件を満たしたらforループを抜けるコード例

次の例では、forループの中でif文を使い、i5になったらbreakします。

C#
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
Console.WriteLine("5になったのでループを終了します");
break;
}

Console.WriteLine("i = " + i);
}

Console.WriteLine("for文の後の処理");

実行結果は次のようになります。

i = 0
i = 1
i = 2
i = 3
i = 4
5になったのでループを終了します
for文の後の処理

このコードでは、i == 5になった時点でbreakが実行され、for文の繰り返し処理が終了します。

3-2. while文の条件分岐でbreakするコード例

while文では、入力値や状態を確認しながら、特定の条件でループを終了する書き方がよく使われます。

C#
int count = 0;

while (true)
{
if (count >= 3)
{
break;
}

Console.WriteLine("count = " + count);
count++;
}

Console.WriteLine("while文を抜けました");

実行結果は次のとおりです。

count = 0
count = 1
count = 2
while文を抜けました

while (true)はそのままでは無限ループですが、if文の条件を満たしたときにbreakすることで、安全に終了できます。

3-3. foreachで特定の要素を見つけたらbreakするコード例

配列やリストから特定のデータを探す場合、見つかった時点でbreakすると無駄な処理を減らせます。

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

foreach (int number in numbers)
{
if (number == 30)
{
Console.WriteLine("30が見つかりました");
break;
}

Console.WriteLine(number);
}

Console.WriteLine("検索終了");

実行結果は次のようになります。

10
20
30が見つかりました
検索終了

30が見つかった時点でbreakするため、4050は処理されません。

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

breakが実行されると、現在のループまたはswitch文を終了し、その直後の処理へ移動します。

次のコードで確認してみましょう。

C#
for (int i = 0; i < 5; i++)
{
Console.WriteLine("ループ開始: " + i);

if (i == 2)
{
break;
}

Console.WriteLine("ループ終了前: " + i);
}

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

実行結果は次のとおりです。

ループ開始: 0
ループ終了前: 0
ループ開始: 1
ループ終了前: 1
ループ開始: 2
ループの外

i == 2のときにbreakが実行されるため、同じループ内にあるConsole.WriteLine("ループ終了前: " + i);は実行されません。そのままfor文を抜けて、外側の処理へ進みます。

3-5. 実行結果から動きを確認する

breakの動きで重要なのは、「breakより後にある同じループ内の処理は実行されない」という点です。

C#
for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
Console.WriteLine("breakします");
break;
}

Console.WriteLine("現在の値: " + i);
}

Console.WriteLine("終了");

実行結果は次のようになります。

現在の値: 1
現在の値: 2
breakします
終了

i3になったとき、breakによってループが終了します。そのため、i45になる処理は実行されません。

4. if文だけを抜けたい場合にbreakは使えるのか

C#では、if文だけを抜けるためにbreakを使うことはできません。if文は条件分岐のための構文であり、ループのように「途中で抜ける」という考え方は基本的にありません。

4-1. ifブロックだけを途中で終了することはできない

たとえば、次のようなコードを考えます。

C#
if (isValid)
{
Console.WriteLine("処理1");

// ここでif文だけを抜けたい

Console.WriteLine("処理2");
}

C#には、ifブロックだけを途中で終了する専用の命令はありません。breakは使えないため、処理の書き方を見直す必要があります。

多くの場合は、条件を追加する、elseを使う、メソッドを分けてreturnする、といった方法で対応します。

4-2. if文単体でbreakを書くとコンパイルエラーになるケース

次のコードはコンパイルエラーになります。

C#
bool isError = true;

if (isError)
{
break;
}

Console.WriteLine("処理を続行");

このコードでは、breakがループ文やswitch文の中にないため、C#では正しくありません。

正しく書くなら、たとえばメソッドの中でreturnを使います。

C#
void Check()
{
bool isError = true;

if (isError)
{
return;
}

Console.WriteLine("処理を続行");
}

この場合、returnによってメソッド自体を終了できます。

4-3. if文内の残り処理を実行したくない場合の考え方

if文内の残り処理を実行したくない場合は、状況に応じて書き方を変えます。

たとえば、条件を反転して処理を分ける方法があります。

C#
if (isValid)
{
Console.WriteLine("有効な場合だけ実行");
}

エラー時に処理を止めたい場合は、早期returnを使うと読みやすくなります。

C#
void Save(string name)
{
if (string.IsNullOrEmpty(name))
{
Console.WriteLine("名前が空です");
return;
}

Console.WriteLine("保存しました");
}

ループ内で現在の回だけ処理をスキップしたい場合は、continueを使います。

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

Console.WriteLine(i);
}

このように、「何を終了したいのか」によって使う命令が変わります。

4-4. ネストしたif文を避ける書き方

if文の中で処理が長くなると、「途中で抜けたい」と感じることがあります。その場合は、ネストを浅くする書き方を検討しましょう。

悪い例です。

C#
void Process(string name)
{
if (!string.IsNullOrEmpty(name))
{
if (name.Length >= 3)
{
Console.WriteLine("処理を実行");
}
}
}

早期returnを使うと、次のように読みやすくなります。

C#
void Process(string name)
{
if (string.IsNullOrEmpty(name))
{
return;
}

if (name.Length < 3)
{
return;
}

Console.WriteLine("処理を実行");
}

breakif文を抜けようとするのではなく、条件の書き方やメソッド設計で整理することが大切です。

5. breakとcontinue・returnの違い

C#では、処理の流れを変える命令としてbreakcontinuereturnがよく使われます。いずれもif文と組み合わせて使われることが多いですが、役割は異なります。

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

breakは、現在のループ文またはswitch文を終了します。

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

Console.WriteLine(i);
}

実行結果は次のとおりです。

0
1

i == 2になった時点でループそのものが終了します。

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. returnはメソッド自体を終了する

returnは、現在のメソッドを終了します。

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

Console.WriteLine(i);
}

Console.WriteLine("ループ後の処理");
}

実行結果は次のようになります。

0
1

i == 2returnが実行されると、ループだけでなくTestメソッド全体が終了します。そのため、Console.WriteLine("ループ後の処理");も実行されません。

5-4. if文の中で使い分ける判断基準

if文の中でbreakcontinuereturnを使い分けるには、「どこまで処理を終了したいのか」を考えます。

ループそのものを終わらせたいならbreakを使います。

C#
if (found)
{
break;
}

現在の繰り返しだけをスキップしたいならcontinueを使います。

C#
if (skip)
{
continue;
}

メソッド全体を終了したいならreturnを使います。

C#
if (error)
{
return;
}

この違いを理解しておくと、if文の中で適切な制御文を選べるようになります。

5-5. break・continue・returnの比較表

命令終了・移動する範囲主な用途if文の中で使う例
breakループまたはswitchを終了検索完了、条件成立で終了条件に一致したらループを抜ける
continue現在のループ回をスキップ不要なデータを飛ばす条件に一致した要素だけ処理しない
returnメソッドを終了エラー時の早期終了条件を満たさなければ処理を終える

たとえば、配列を処理する場合でも、それぞれの使い方は異なります。

C#
foreach (int number in numbers)
{
if (number < 0)
{
continue;
}

if (number == 100)
{
break;
}

Console.WriteLine(number);
}

この例では、負の数はcontinueでスキップし、100が出たらbreakでループを終了しています。

6. ネストしたループでif文とbreakを使う注意点

C#でbreakを使うときに特に注意したいのが、二重ループや三重ループなど、ループがネストしている場合です。breakは、すべてのループを一気に抜けるわけではありません。

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

breakは、最も近い外側のループまたはswitch文だけを終了します。

たとえば、二重ループの内側で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文は続きます。

6-2. 二重ループでbreakを使うコード例

実行結果を確認してみましょう。

C#
for (int i = 0; i < 3; i++)
{
Console.WriteLine("外側ループ: " + i);

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

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

実行結果は次のようになります。

外側ループ: 0
内側ループ: 0
外側ループ: 1
内側ループ: 0
外側ループ: 2
内側ループ: 0

内側のループではj == 1breakしていますが、外側のiのループは012と継続しています。

6-3. 外側のループまで抜けたい場合の書き方

C#には、breakだけで複数階層のループを直接抜ける構文はありません。そのため、外側のループまで終了したい場合は、別の方法を使う必要があります。

代表的な方法は次の2つです。

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

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

どちらを選ぶかは、処理の内容やコードの読みやすさによって決めます。

6-4. フラグ変数を使って外側のループを終了する方法

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

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を確認し、もう一度breakしています。

6-5. 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が実行され、Searchメソッド全体が終了します。外側のループも内側のループもまとめて抜けたい場合に有効です。

7. if文とbreakを使う実践パターン

C#でif文とbreakを組み合わせる場面は、実務でもよくあります。ここでは、よく使われる実践パターンを紹介します。

7-1. 条件に一致するデータを見つけたら検索を終了する

配列やリストから特定の値を探す場合、見つかった時点でbreakすると効率的です。

C#
string[] users = { "admin", "guest", "user01", "user02" };
string target = "user01";

foreach (string user in users)
{
if (user == target)
{
Console.WriteLine("ユーザーが見つかりました");
break;
}

Console.WriteLine("確認中: " + user);
}

このコードでは、user01が見つかった時点で検索を終了します。すでに目的のデータが見つかっているのに、残りの要素を処理する必要はありません。

7-2. 入力値が不正な場合にループを抜ける

ユーザー入力を繰り返し受け付ける処理でも、if文とbreakはよく使われます。

C#
while (true)
{
Console.WriteLine("数値を入力してください。終了するには q を入力してください。");
string input = Console.ReadLine();

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

if (int.TryParse(input, out int number))
{
Console.WriteLine("入力された数値: " + number);
}
else
{
Console.WriteLine("数値ではありません");
}
}

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

この例では、qが入力されたらbreakでループを終了します。

7-3. 無限ループを特定条件で終了する

while (true)を使った無限ループは、特定条件でbreakする前提で書かれることがあります。

C#
int count = 0;

while (true)
{
Console.WriteLine("処理中: " + count);

if (count >= 5)
{
break;
}

count++;
}

Console.WriteLine("無限ループを終了しました");

このような書き方では、break条件が明確であることが重要です。条件が間違っていると、ループが終了しなくなる可能性があります。

7-4. エラー発生時に処理を中断する

複数のデータを順番に処理する場面で、エラーが発生したら処理を中断したい場合があります。

C#
int[] values = { 10, 20, -1, 30, 40 };

foreach (int value in values)
{
if (value < 0)
{
Console.WriteLine("不正な値が見つかったため中断します");
break;
}

Console.WriteLine("処理: " + value);
}

Console.WriteLine("処理終了");

実行結果は次のようになります。

処理: 10
処理: 20
不正な値が見つかったため中断します
処理終了

-1が見つかった時点でbreakするため、3040は処理されません。

7-5. ゲームやアプリの処理で条件に応じてループを止める

ゲームやアプリでは、特定の状態になったらループを終了する処理がよくあります。

C#
bool gameOver = false;
int turn = 0;

while (true)
{
Console.WriteLine("ターン: " + turn);

if (gameOver)
{
break;
}

turn++;

if (turn >= 3)
{
gameOver = true;
}
}

Console.WriteLine("ゲーム終了");

この例では、gameOvertrueになったらbreakでループを終了します。ゲームループや監視処理では、このように状態を見ながらループを止める書き方が使われます。

8. C#でbreakを使うときによくある間違い

breakは便利な制御文ですが、使い方を誤ると意図しない動きになります。特に、if文と組み合わせるときは、breakが何を終了するのかを正しく理解しておく必要があります。

8-1. if文を抜けるためにbreakを書いてしまう

初心者がよく間違えるのが、if文を途中で抜けるためにbreakを書いてしまうことです。

C#
if (isError)
{
break;
}

このコードは、ループやswitch文の中でなければコンパイルエラーになります。

if文だけを抜けたい場合は、breakではなく、条件分岐の書き方を見直します。メソッド全体を終了したいならreturnを使います。

C#
if (isError)
{
return;
}

ただし、returnはメソッドを終了する命令なので、ループだけを抜けたい場合とは意味が異なります。

8-2. breakとcontinueを混同する

breakcontinueはどちらもループ内で使いますが、動きは異なります。

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

Console.WriteLine(i);
}

この場合、実行結果は次のとおりです。

0
1

一方、continueを使うと次のようになります。

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

Console.WriteLine(i);
}

実行結果は次のとおりです。

0
1
3
4

ループを終了したいならbreak、その回だけ飛ばしたいならcontinueです。

8-3. ネストしたループで意図しないループだけ抜ける

二重ループの内側でbreakを使うと、抜けるのは内側のループだけです。

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

Console.WriteLine("外側ループは続く: " + i);
}

外側のループまで終了するつもりでbreakを書いても、実際には内側のループしか終了しません。外側まで抜けたい場合は、フラグ変数やreturnを検討します。

8-4. break後の処理が実行されないことを見落とす

breakが実行されると、その後にある同じループ内の処理は実行されません。

C#
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
break;
Console.WriteLine("ここは実行されない");
}

Console.WriteLine(i);
}

breakの後に書かれた処理は到達できません。実際のコードでは、このような書き方をするとエラーや警告の原因になります。

必要な処理がある場合は、breakの前に書く必要があります。

C#
if (i == 2)
{
Console.WriteLine("終了前の処理");
break;
}

8-5. switch文のbreakとループ文のbreakを混同する

switch文のbreakとループ文のbreakは、どちらも「現在の構文を抜ける」という意味では似ています。ただし、抜ける対象が異なります。

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

Console.WriteLine("forループは続く");
}

このコードのbreakswitch文を抜けるためのものであり、forループを抜けるわけではありません。

switch文の中でループまで抜けたい場合は、別のフラグを使う、または処理をメソッド化してreturnするなどの工夫が必要です。

9. 読みやすいコードにするためのbreakの使い方

breakは便利ですが、使いすぎると処理の流れが追いにくくなることがあります。読みやすいコードにするためには、breakを使う意図を明確にすることが大切です。

9-1. breakを使う条件を明確にする

breakを使うときは、終了条件がひと目でわかるように書きましょう。

わかりやすい例です。

C#
foreach (string item in items)
{
if (item == target)
{
break;
}

Console.WriteLine(item);
}

このコードでは、item == targetになったらループを終了することが明確です。

一方で、複雑な条件をそのままif文に書くと読みにくくなります。

C#
if (user.IsActive && user.Score > 80 && user.Name.StartsWith("A") && !user.IsDeleted)
{
break;
}

条件が複雑な場合は、変数に分けると読みやすくなります。

C#
bool shouldStop = user.IsActive
&& user.Score > 80
&& user.Name.StartsWith("A")
&& !user.IsDeleted;

if (shouldStop)
{
break;
}

9-2. ネストを深くしすぎない

if文とループを何重にもネストすると、breakがどこに作用するのか分かりにくくなります。

読みにくい例です。

C#
foreach (var user in users)
{
if (user.IsActive)
{
if (user.Score > 80)
{
if (user.Name == targetName)
{
break;
}
}
}
}

条件をまとめると、より読みやすくなります。

C#
foreach (var user in users)
{
if (user.IsActive && user.Score > 80 && user.Name == targetName)
{
break;
}
}

ネストが深いときは、条件を整理する、メソッドに分ける、早期continueを使うなどの方法を検討しましょう。

9-3. 早期終了でコードをシンプルにする

breakは、不要な処理を続けないための早期終了として使うと効果的です。

C#
foreach (int number in numbers)
{
if (number < 0)
{
Console.WriteLine("不正な値が見つかりました");
break;
}

Console.WriteLine("処理: " + number);
}

このように、不正な値が見つかった時点で処理を終了すれば、後続の処理を実行せずに済みます。

早期終了は、条件が明確であればコードをシンプルにできます。ただし、あちこちにbreakがあると流れを追いにくくなるため、使う場所は整理しましょう。

9-4. コメントを書くべきケースと不要なケース

breakを使う条件がコードから明らかな場合、コメントは不要です。

C#
if (number == target)
{
break;
}

この場合、「targetが見つかったら終了する」という意図は比較的わかりやすいです。

一方で、業務ルールや特殊な条件によってbreakする場合は、コメントを書くと親切です。

C#
if (order.Status == "Cancelled")
{
// キャンセル済みの注文以降は処理対象外とする
break;
}

コメントは「何をしているか」ではなく、「なぜそうしているか」を補足するために使うと効果的です。

9-5. breakを使わないほうがよいケース

breakを使わなくても、ループ条件で自然に表現できる場合があります。

たとえば、次のようなコードです。

C#
int i = 0;

while (true)
{
if (i >= 5)
{
break;
}

Console.WriteLine(i);
i++;
}

この場合は、while文の条件に書いたほうが自然です。

C#
int i = 0;

while (i < 5)
{
Console.WriteLine(i);
i++;
}

breakは便利ですが、何でもbreakで終了させればよいわけではありません。ループの継続条件として表現できる場合は、そちらを優先したほうが読みやすいこともあります。

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

ここでは、C#のbreakif文について、初心者が疑問に感じやすいポイントをQ&A形式で整理します。

10-1. if文の中にbreakを書いてもよいですか?

はい、書いてもよいです。ただし、そのif文がループ文またはswitch文の中にある場合に限ります。

正しい例です。

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

この場合、breakforループを終了します。

一方、次のようにif文単体でbreakを書くことはできません。

C#
if (isError)
{
break;
}

breakには抜ける対象となるループ文またはswitch文が必要です。

10-2. if文だけを抜ける方法はありますか?

C#には、if文だけを途中で抜ける専用の命令はありません。

if文の中の処理を実行したくない場合は、条件分岐を整理します。

C#
if (isValid)
{
Console.WriteLine("有効な場合だけ処理します");
}

メソッド全体を終了したい場合は、returnを使います。

C#
if (!isValid)
{
return;
}

Console.WriteLine("処理を続行します");

ループ内で現在の回だけスキップしたい場合は、continueを使います。

10-3. breakでメソッドを終了できますか?

いいえ、breakでメソッド自体を終了することはできません。

breakが終了できるのは、ループ文またはswitch文です。メソッドを終了したい場合はreturnを使います。

C#
void Sample()
{
if (true)
{
return;
}

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

returnは、メソッドの実行をその時点で終了します。

10-4. foreachの中でbreakは使えますか?

はい、foreach文の中でもbreakは使えます。

C#
string[] fruits = { "apple", "banana", "orange" };

foreach (string fruit in fruits)
{
if (fruit == "banana")
{
break;
}

Console.WriteLine(fruit);
}

実行結果は次のとおりです。

apple

bananaが見つかった時点でbreakが実行されるため、それ以降の要素は処理されません。

10-5. switch文の中のbreakとループのbreakは同じですか?

基本的には、どちらも「現在の構文を抜ける」ための命令です。ただし、抜ける対象が異なります。

switch文の中で使うbreakは、switch文を抜けます。

C#
switch (value)
{
case 1:
Console.WriteLine("1です");
break;
}

ループ文の中で使うbreakは、ループを抜けます。

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

また、ループの中にswitch文がある場合、switch文内のbreakは基本的にswitch文を抜けるためのものです。外側のループまで抜けるわけではない点に注意しましょう。

まとめ

C#のbreakは、if文そのものを抜けるための命令ではありません。breakで抜けられるのは、for文、while文、foreach文、do-while文などのループ文、またはswitch文です。

ただし、ループやswitch文の中にあるif文で条件を判定し、その条件を満たしたときにbreakする書き方は非常によく使われます。

たとえば、「特定の値が見つかったら検索を終了する」「不正な入力があったらループを抜ける」「無限ループを条件付きで終了する」といった場面では、if文とbreakの組み合わせが有効です。

一方で、if文だけを抜けたい場合にbreakを書くと、ループやswitch文の中でない限りコンパイルエラーになります。その場合は、条件分岐を整理する、continueで現在のループ回をスキップする、returnでメソッドを終了するなど、目的に応じた制御文を選びましょう。

breakcontinuereturnの違いを理解しておくと、C#の条件分岐とループ処理をより正確に書けるようになります。特に、if文の中でbreakを使うときは、「何を抜けるのか」を意識することが大切です。