C#のcaseとは?switch文の基本構文・break・default・複数条件を初心者向けに徹底解説
はじめに
C#で値に応じて処理を振り分けたいときに便利なのが、switch文とcaseです。
たとえば、曜日ごとにメッセージを変える、メニュー番号ごとに異なる処理を実行する、ステータスごとに画面表示を切り替えるといった場面で活用できます。
C#int menuNumber = 2;
switch (menuNumber)
{
case 1:
Console.WriteLine("新規登録を開始します");
break;
case 2:
Console.WriteLine("データを検索します");
break;
default:
Console.WriteLine("該当するメニューがありません");
break;
}
このコードでは、menuNumberの値が2なので、「データを検索します」と表示されます。
本記事では、C#のcaseの意味、switch文の基本構文、breakが必要な理由、defaultの役割、複数条件の指定方法を初心者向けに解説します。
1. C#のcaseとは?switch文で条件分岐する仕組み
1-1. caseは値ごとに処理を振り分けるためのキーワード
C#のcaseは、switch文の中で、特定の値に対応する処理を定義するためのキーワードです。
次のコードでは、変数numberの値に応じて処理を振り分けています。
C#int number = 2;
switch (number)
{
case 1:
Console.WriteLine("値は1です");
break;
case 2:
Console.WriteLine("値は2です");
break;
case 3:
Console.WriteLine("値は3です");
break;
}
numberの値は2なので、case 2に書かれた処理が実行されます。
このように、caseは「判定対象の値がこの値だった場合に、どの処理を実行するか」を表します。
1-2. switch文とcaseラベルの関係
switch文では、最初に判定対象となる値を指定します。その後、値と一致するcaseラベルを上から確認し、一致した場所の処理を実行します。
C#switch (判定対象の値)
{
case 値1:
値1に一致した場合の処理;
break;
case 値2:
値2に一致した場合の処理;
break;
}
case 値1:やcase 値2:の部分を「caseラベル」と呼びます。
たとえば、次のコードではcommandが"start"と一致するため、case "start"の処理が実行されます。
C#string command = "start";
switch (command)
{
case "start":
Console.WriteLine("処理を開始します");
break;
case "stop":
Console.WriteLine("処理を停止します");
break;
}
一致するcaseが見つからなかった場合は、defaultがあればその処理が実行されます。defaultもなければ、switch文の中では何も実行されません。
1-3. caseを使うメリット
caseを使う主なメリットは、同じ値に対する条件分岐を整理して記述できることです。
特に、次のような状況でコードが読みやすくなります。
判定対象となる変数が1つである
値ごとに異なる処理を実行したい
選択肢が複数ある
メニュー番号や状態を判定したい
たとえば、if文を連続して書くと、次のようになります。
C#int level = 2;
if (level == 1)
{
Console.WriteLine("初級");
}
else if (level == 2)
{
Console.WriteLine("中級");
}
else if (level == 3)
{
Console.WriteLine("上級");
}
同じ処理をswitch文で書くと、判定する値と処理の対応関係が明確になります。
C#int level = 2;
switch (level)
{
case 1:
Console.WriteLine("初級");
break;
case 2:
Console.WriteLine("中級");
break;
case 3:
Console.WriteLine("上級");
break;
}
選択肢が増えるほど、switch文の方が全体を把握しやすくなる場合があります。
1-4. if文・else if文との違い
if文とswitch文は、どちらも条件分岐に使用します。ただし、得意とする条件が異なります。
if文は、比較演算子や論理演算子を組み合わせた複雑な条件を柔軟に記述できます。
C#int age = 25;
bool hasLicense = true;
if (age >= 18 && hasLicense)
{
Console.WriteLine("運転できます");
}
一方、switch文は、1つの値を複数の候補と比較するときに適しています。
C#string rank = "B";
switch (rank)
{
case "A":
Console.WriteLine("評価は優秀です");
break;
case "B":
Console.WriteLine("評価は良好です");
break;
case "C":
Console.WriteLine("評価は標準です");
break;
}
基本的には、条件式が複雑ならif文、1つの値を複数の候補に振り分けるならswitch文を検討するとよいでしょう。
なお、現在のC#ではパターンマッチングを利用できるため、switch文でも範囲判定や型判定などを記述できます。ただし、単純な値の比較から理解すると、基本構文を身につけやすくなります。
1-5. caseが適している処理と適していない処理
caseが適しているのは、次のような処理です。
C#int menu = 1;
switch (menu)
{
case 1:
Console.WriteLine("商品一覧を表示します");
break;
case 2:
Console.WriteLine("カートを表示します");
break;
case 3:
Console.WriteLine("アプリケーションを終了します");
break;
}
メニュー番号、曜日、コマンド名、列挙型の値、処理状態など、候補が明確に決まっている場合に向いています。
一方、次のように複数の変数を組み合わせる条件や、複雑な論理条件では、if文の方が分かりやすい場合があります。
C#int age = 20;
int score = 85;
if (age >= 18 && score >= 80)
{
Console.WriteLine("条件を満たしています");
}
switch文でも高度なパターンマッチングを使えば表現できますが、無理にcaseへ置き換える必要はありません。処理の意図を理解しやすい書き方を選ぶことが大切です。
2. C#のswitch文とcaseの基本構文
2-1. switch文の基本的な書き方
C#のswitch文は、次のように記述します。
C#switch (判定対象)
{
case 値1:
処理1;
break;
case 値2:
処理2;
break;
default:
どのcaseにも一致しない場合の処理;
break;
}
基本的な流れは次のとおりです。
switchの丸括弧内に判定対象を指定するcaseの後ろに一致させたい値を書くコロンの後ろに実行したい処理を書く
処理の最後に
breakを書く必要に応じて
defaultを書く
具体例を確認しましょう。
C#int value = 20;
switch (value)
{
case 10:
Console.WriteLine("10です");
break;
case 20:
Console.WriteLine("20です");
break;
default:
Console.WriteLine("10でも20でもありません");
break;
}
この場合、valueは20なので、「20です」と表示されます。
2-2. switch式に判定対象の値を指定する
switchの直後にある丸括弧には、判定対象となる値や式を指定します。
C#string status = "completed";
switch (status)
{
case "completed":
Console.WriteLine("処理が完了しました");
break;
}
この例では、変数statusが判定対象です。
メソッドの戻り値を直接指定することもできます。
C#static int GetMenuNumber()
{
return 2;
}
switch (GetMenuNumber())
{
case 1:
Console.WriteLine("メニュー1");
break;
case 2:
Console.WriteLine("メニュー2");
break;
}
ただし、同じメソッドを何度も呼び出す必要がある場合や、判定前に値を確認したい場合は、いったん変数へ代入した方が分かりやすくなります。
2-3. caseに一致させる値を記述する
caseの後ろには、判定対象と比較する値を記述します。
C#int month = 4;
switch (month)
{
case 1:
Console.WriteLine("1月");
break;
case 4:
Console.WriteLine("4月");
break;
}
単純な値を判定する場合、caseラベルには数値リテラル、文字列リテラル、文字リテラル、列挙型のメンバー、定数などを指定できます。
C#const int SuccessCode = 200;
int statusCode = 200;
switch (statusCode)
{
case SuccessCode:
Console.WriteLine("成功しました");
break;
}
通常の変数は実行中に値が変わる可能性があるため、単純な定数値としてのcaseラベルには使用できません。
C#int successCode = 200;
int statusCode = 200;
switch (statusCode)
{
// case successCode:
// コンパイルエラー
}
値が固定されている場合は、constを使用します。
2-4. case内に実行したい処理を書く
caseラベルの後ろには、一致したときに実行したい処理を書きます。
C#int operation = 1;
switch (operation)
{
case 1:
Console.WriteLine("登録処理を開始します");
Console.WriteLine("入力内容を確認します");
Console.WriteLine("データを保存します");
break;
}
複数の文を記述することも可能です。
変数を宣言する場合は、波括弧でスコープを分けると安全です。
C#int operation = 1;
switch (operation)
{
case 1:
{
string message = "登録しました";
Console.WriteLine(message);
break;
}
case 2:
{
string message = "更新しました";
Console.WriteLine(message);
break;
}
}
波括弧を使うことで、各case内の変数が別々のスコープに属するため、同じ変数名を使用しやすくなります。
2-5. 文字列をcaseで判定するサンプルコード
C#では、文字列をcaseで判定できます。
C#string color = "red";
switch (color)
{
case "red":
Console.WriteLine("赤色です");
break;
case "blue":
Console.WriteLine("青色です");
break;
case "green":
Console.WriteLine("緑色です");
break;
default:
Console.WriteLine("登録されていない色です");
break;
}
文字列の比較では、大文字と小文字が区別されます。そのため、"red"と"RED"は別の値です。
C#string color = "RED";
switch (color)
{
case "red":
Console.WriteLine("赤色です");
break;
default:
Console.WriteLine("一致しません");
break;
}
このコードでは、"RED"と"red"が異なるため、「一致しません」と表示されます。
大文字と小文字を区別したくない場合は、判定前に文字列を統一する方法があります。
C#string color = "RED";
switch (color.ToLowerInvariant())
{
case "red":
Console.WriteLine("赤色です");
break;
case "blue":
Console.WriteLine("青色です");
break;
default:
Console.WriteLine("登録されていない色です");
break;
}
ただし、colorがnullになる可能性がある場合は、先にnullを考慮する必要があります。
C#string? color = null;
switch (color?.ToLowerInvariant())
{
case "red":
Console.WriteLine("赤色です");
break;
case null:
Console.WriteLine("色が指定されていません");
break;
default:
Console.WriteLine("登録されていない色です");
break;
}
2-6. 数値をcaseで判定するサンプルコード
整数値は、switch文でよく判定される型の1つです。
C#int menuNumber = 3;
switch (menuNumber)
{
case 1:
Console.WriteLine("ファイルを開きます");
break;
case 2:
Console.WriteLine("ファイルを保存します");
break;
case 3:
Console.WriteLine("アプリケーションを終了します");
break;
default:
Console.WriteLine("無効なメニュー番号です");
break;
}
範囲を判定したい場合は、C#のパターンマッチングを利用できます。
C#int score = 85;
switch (score)
{
case >= 90:
Console.WriteLine("評価A");
break;
case >= 80:
Console.WriteLine("評価B");
break;
case >= 70:
Console.WriteLine("評価C");
break;
default:
Console.WriteLine("評価D");
break;
}
caseは上から順番に判定されます。scoreが85の場合、case >= 90には一致せず、次のcase >= 80に一致するため、「評価B」と表示されます。
範囲条件を書く場合は、広い条件を先に置くと後続の条件へ到達できなくなることがあります。上から判定されることを意識して、条件の順番を決めましょう。
2-7. char型やenum型をcaseで判定する方法
char型を判定する場合は、文字をシングルクォーテーションで囲みます。
C#char answer = 'y';
switch (answer)
{
case 'y':
Console.WriteLine("はいが選択されました");
break;
case 'n':
Console.WriteLine("いいえが選択されました");
break;
default:
Console.WriteLine("yまたはnを入力してください");
break;
}
文字列はダブルクォーテーション、char型の文字はシングルクォーテーションを使う点に注意してください。
C#string text = "a";
char character = 'a';
enum型もswitch文と相性がよい型です。
C#enum OrderStatus
{
Pending,
Processing,
Shipped,
Completed
}
OrderStatus status = OrderStatus.Shipped;
switch (status)
{
case OrderStatus.Pending:
Console.WriteLine("注文を確認しています");
break;
case OrderStatus.Processing:
Console.WriteLine("商品を準備しています");
break;
case OrderStatus.Shipped:
Console.WriteLine("商品を発送しました");
break;
case OrderStatus.Completed:
Console.WriteLine("注文が完了しました");
break;
default:
Console.WriteLine("不明な状態です");
break;
}
enumを使うと、単なる数値よりも値の意味が伝わりやすくなります。状態管理や処理段階の判定には、enumとswitch文の組み合わせが便利です。
3. C#のcaseでbreakが必要な理由
3-1. breakはswitch文を終了するためのキーワード
breakは、現在実行しているswitch文を終了し、switch文の次の処理へ移動するためのキーワードです。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("case 1を実行しました");
break;
case 2:
Console.WriteLine("case 2を実行しました");
break;
}
Console.WriteLine("switch文の後の処理です");
実行結果は次のようになります。
case 1を実行しました
switch文の後の処理です
case 1の処理を実行した後、breakによってswitch文を抜けています。
3-2. breakを書かないとコンパイルエラーになるケース
C#では、処理が書かれているcaseから次のcaseへ、そのまま実行を移すことはできません。
次のコードはコンパイルエラーになります。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
// breakがないためコンパイルエラー
case 2:
Console.WriteLine("2です");
break;
}
case 1の処理が終わった後に、どこへ移動するのかが指定されていないためです。
通常は、次のようにbreakを追加します。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
}
ただし、returnやthrowなどによって処理が確実に終了する場合は、breakを書く必要がありません。
3-3. C#では空のcaseを除きフォールスルーできない
あるcaseの処理を実行した後、そのまま次のcaseの処理へ進む動作を「フォールスルー」と呼びます。
C#では、処理が書かれたcaseから次のcaseへの暗黙的なフォールスルーは許可されていません。
C#int value = 1;
switch (value)
{
case 1:
Console.WriteLine("1です");
case 2:
Console.WriteLine("2です");
break;
}
このコードはコンパイルエラーになります。
一方、処理が何も書かれていない空のcaseは連続して記述できます。
C#int value = 1;
switch (value)
{
case 1:
case 2:
Console.WriteLine("1または2です");
break;
}
valueが1または2なら、同じ処理が実行されます。これは複数の値をOR条件として扱う代表的な書き方です。
3-4. 複数のcaseで同じ処理を実行する書き方
複数の値に対して同じ処理を実行したい場合は、caseラベルを連続して記述します。
C#int month = 4;
switch (month)
{
case 3:
case 4:
case 5:
Console.WriteLine("春です");
break;
case 6:
case 7:
case 8:
Console.WriteLine("夏です");
break;
case 9:
case 10:
case 11:
Console.WriteLine("秋です");
break;
case 12:
case 1:
case 2:
Console.WriteLine("冬です");
break;
default:
Console.WriteLine("1から12までの数値を指定してください");
break;
}
この例では、monthが3、4、5のいずれかなら「春です」と表示されます。
同じ処理を何度も書かずに済むため、コードの重複を減らせます。
3-5. breakの代わりにreturn・throw・gotoを使うケース
caseの処理を終了させる方法は、breakだけではありません。
メソッド自体を終了する場合は、returnを使用できます。
C#static string GetDayType(DayOfWeek day)
{
switch (day)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
return "休日";
default:
return "平日";
}
}
returnが実行されるとメソッドが終了するため、後ろにbreakは必要ありません。
想定外の値をエラーとして扱う場合は、throwを使用できます。
C#static string GetStatusMessage(int status)
{
switch (status)
{
case 1:
return "処理中";
case 2:
return "完了";
default:
throw new ArgumentOutOfRangeException(
nameof(status),
status,
"未対応のステータスです");
}
}
明示的に別のcaseへ移動したい場合は、goto caseを使用できます。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1の前処理");
goto case 2;
case 2:
Console.WriteLine("共通処理");
break;
}
numberが1の場合は、「1の前処理」を表示した後、case 2へ移動して「共通処理」を表示します。
defaultへ移動するgoto defaultもあります。
C#switch (number)
{
case 1:
goto default;
default:
Console.WriteLine("共通の終了処理");
break;
}
ただし、gotoを多用すると処理の流れを追いにくくなります。共通処理をメソッドとして切り出すなど、より読みやすい設計を優先しましょう。
3-6. breakとcontinueの違い
breakとcontinueは役割が異なります。
breakは、現在のswitch文またはループを終了します。
C#for (int i = 1; i <= 3; i++)
{
switch (i)
{
case 2:
break;
}
Console.WriteLine(i);
}
このコードのbreakが終了するのは、内側のswitch文です。forループそのものは継続するため、1、2、3が表示されます。
一方、continueは、現在実行しているループの残りの処理を飛ばし、次の繰り返しへ移動します。
C#for (int i = 1; i <= 3; i++)
{
switch (i)
{
case 2:
continue;
}
Console.WriteLine(i);
}
iが2のときはcontinueによって次の繰り返しへ進むため、表示されるのは1と3です。
continueはループに対する制御です。switch文がループの中にない場合、continueは使用できません。
4. C#のdefaultとは?どのcaseにも一致しない場合の処理
4-1. defaultの基本的な役割
defaultは、判定対象の値がどのcaseにも一致しなかった場合に実行される処理です。
C#int number = 5;
switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
default:
Console.WriteLine("1でも2でもありません");
break;
}
numberは5なので、どのcaseにも一致せず、defaultの処理が実行されます。
if文に置き換えると、defaultは最後のelseに近い役割を持ちます。
C#if (number == 1)
{
Console.WriteLine("1です");
}
else if (number == 2)
{
Console.WriteLine("2です");
}
else
{
Console.WriteLine("1でも2でもありません");
}
4-2. defaultを使ったサンプルコード
ユーザーが入力したメニュー番号を判定する例を見てみましょう。
C#Console.Write("メニュー番号を入力してください: ");
string? input = Console.ReadLine();
if (int.TryParse(input, out int menuNumber))
{
switch (menuNumber)
{
case 1:
Console.WriteLine("商品を登録します");
break;
case 2:
Console.WriteLine("商品を検索します");
break;
case 3:
Console.WriteLine("商品を削除します");
break;
default:
Console.WriteLine("1から3までの番号を入力してください");
break;
}
}
else
{
Console.WriteLine("数値を入力してください");
}
int.TryParseによって、入力された文字列を安全に整数へ変換しています。
整数へ変換できたものの、値が1から3の範囲外だった場合は、defaultで案内メッセージを表示します。
4-3. defaultは省略できる
defaultは必須ではないため、省略できます。
C#int number = 3;
switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
}
Console.WriteLine("処理を続けます");
numberはどのcaseにも一致しないため、switch文の中では何も実行されません。その後、「処理を続けます」と表示されます。
一致しない値を無視しても問題ない場合は、defaultを省略できます。
ただし、入力値の間違いやプログラム上の不具合を見逃したくない場合は、defaultを用意した方が安全です。
4-4. defaultを記述する位置に決まりはある?
defaultは、必ず最後に書かなければならないわけではありません。構文上は、caseラベルの前や途中にも記述できます。
C#int number = 2;
switch (number)
{
default:
Console.WriteLine("その他の値です");
break;
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
}
このコードも正しく動作し、numberが2なので「2です」と表示されます。
ただし、一般的にはdefaultを最後に書きます。
C#switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
default:
Console.WriteLine("その他の値です");
break;
}
最後に配置した方が、「個別の値を判定した後、どれにも一致しない値を処理する」という流れを読み取りやすくなります。
4-5. 想定外の値を安全に処理する方法
defaultでは、単にメッセージを表示するだけでなく、ログを記録したり、安全な初期値を設定したりできます。
C#int statusCode = 999;
string message;
switch (statusCode)
{
case 200:
message = "成功";
break;
case 400:
message = "不正なリクエスト";
break;
case 500:
message = "サーバーエラー";
break;
default:
message = "不明なステータス";
Console.WriteLine($"未対応の値を検出しました: {statusCode}");
break;
}
Console.WriteLine(message);
想定外の値を受け取ったときに、変数を未設定のままにしないことが重要です。
外部から受け取った値を判定する場合は、次のような対応を検討します。
エラーメッセージを表示する
ログへ値を記録する
安全な初期値を設定する
呼び出し元へ失敗を通知する
処理を中断する
どの対応が適切かは、想定外の値が発生したときに処理を続けても安全かどうかで判断します。
4-6. defaultで例外を投げる設計
想定外の値がプログラム上の不具合を示している場合は、defaultで例外を投げる設計が有効です。
C#enum PaymentStatus
{
Pending,
Paid,
Canceled
}
static string GetPaymentMessage(PaymentStatus status)
{
switch (status)
{
case PaymentStatus.Pending:
return "支払い待ちです";
case PaymentStatus.Paid:
return "支払い済みです";
case PaymentStatus.Canceled:
return "キャンセルされました";
default:
throw new ArgumentOutOfRangeException(
nameof(status),
status,
"未対応の支払い状態です");
}
}
enum型であっても、キャストなどによって定義されていない値が渡される可能性があります。
C#PaymentStatus status = (PaymentStatus)999;
そのため、すべての列挙値をcaseに書いている場合でも、defaultで例外を投げる設計には意味があります。
ただし、ユーザーが入力を間違えただけのようなケースで、必ず例外を投げる必要はありません。再入力を促すなど、通常のエラーとして処理した方が適切な場合もあります。
5. C#のcaseで複数条件を指定する方法
5-1. caseを連続してOR条件を表現する
複数の値のうち、いずれかに一致した場合に同じ処理を実行したいときは、caseを連続して記述します。
C#int value = 2;
switch (value)
{
case 1:
case 2:
case 3:
Console.WriteLine("1、2、3のいずれかです");
break;
default:
Console.WriteLine("対象外です");
break;
}
これは、if文で次のように書くのと同じ考え方です。
C#if (value == 1 || value == 2 || value == 3)
{
Console.WriteLine("1、2、3のいずれかです");
}
else
{
Console.WriteLine("対象外です");
}
caseを連続させるときは、途中に処理を書きません。最後のcaseの後ろに、共通処理とbreakを記述します。
また、比較的新しいC#では、orパターンを使って次のように書くこともできます。
C#switch (value)
{
case 1 or 2 or 3:
Console.WriteLine("1、2、3のいずれかです");
break;
default:
Console.WriteLine("対象外です");
break;
}
どちらもOR条件を表します。使用しているC#のバージョンや、プロジェクトのコーディングルールに合わせて選びましょう。
5-2. 複数の数値で同じ処理を実行する
複数の数値をグループ化すると、点数、月、曜日番号、エラーコードなどを分かりやすく分類できます。
C#int dayNumber = 6;
switch (dayNumber)
{
case 1:
case 2:
case 3:
case 4:
case 5:
Console.WriteLine("平日です");
break;
case 6:
case 7:
Console.WriteLine("休日です");
break;
default:
Console.WriteLine("1から7までの数値を指定してください");
break;
}
dayNumberが1から5なら「平日です」、6または7なら「休日です」と表示されます。
連続した範囲を判定する場合は、関係パターンを使う方法もあります。
C#int dayNumber = 6;
switch (dayNumber)
{
case >= 1 and <= 5:
Console.WriteLine("平日です");
break;
case 6 or 7:
Console.WriteLine("休日です");
break;
default:
Console.WriteLine("1から7までの数値を指定してください");
break;
}
andはAND条件、orはOR条件を表します。
単純な値の列挙なら複数のcase、連続する範囲なら関係パターンを使うと、処理の意図が伝わりやすくなります。
5-3. 複数の文字列で同じ処理を実行する
文字列でも、複数のcaseを連続して同じ処理を実行できます。
C#string command = "start";
switch (command)
{
case "start":
case "run":
case "execute":
Console.WriteLine("処理を開始します");
break;
case "stop":
case "end":
case "exit":
Console.WriteLine("処理を終了します");
break;
default:
Console.WriteLine("不明なコマンドです");
break;
}
"start"、"run"、"execute"のいずれかが指定された場合、同じ開始処理を実行します。
大文字と小文字を区別しない場合は、判定前に文字列を正規化します。
C#string? input = Console.ReadLine();
string command = input?.Trim().ToLowerInvariant() ?? string.Empty;
switch (command)
{
case "start":
case "run":
Console.WriteLine("処理を開始します");
break;
case "stop":
case "exit":
Console.WriteLine("処理を終了します");
break;
case "":
Console.WriteLine("コマンドを入力してください");
break;
default:
Console.WriteLine("不明なコマンドです");
break;
}
Trimで前後の空白を取り除き、ToLowerInvariantで小文字へ統一しています。さらに、入力がnullの場合は空文字列へ置き換えています。
これにより、"START"や" Start "と入力された場合でも、"start"として判定できます。
まとめ
C#のcaseは、switch文の中で、値ごとに処理を振り分けるためのキーワードです。
基本構文は次のとおりです。
C#switch (判定対象)
{
case 値1:
処理1;
break;
case 値2:
処理2;
break;
default:
どのcaseにも一致しない場合の処理;
break;
}
breakは、該当するcaseの処理を終えてswitch文から抜けるために使用します。C#では、処理が書かれたcaseから次のcaseへ暗黙的にフォールスルーできません。
複数の値で同じ処理を実行したい場合は、次のようにcaseを連続して記述します。
C#switch (value)
{
case 1:
case 2:
case 3:
Console.WriteLine("1、2、3のいずれかです");
break;
}
defaultを用意すると、どのcaseにも一致しない値を処理できます。ユーザー入力や外部データを扱う場合は、想定外の値に備えてdefaultを記述すると安全です。
単純な値の振り分けにはswitch文とcase、複雑な論理条件にはif文を使うなど、条件の内容に応じて適切な書き方を選びましょう。

