C#のswitch文にelseは使える?case・defaultの正しい書き方を解説

はじめに

C#で条件分岐を書くときによく使うのがswitch文です。特定の値に応じて処理を分けたい場合、if文よりもswitch caseを使ったほうが読みやすくなることがあります。

一方で、C#を学び始めたばかりの人が迷いやすいのが「switch文にelseは使えるのか?」という点です。

結論からいうと、C#のswitch文ではelseは使えません。if文のelseに相当する処理を書きたい場合は、defaultを使います。

この記事では、C#のswitch文におけるcasedefaultbreakの正しい書き方や、elseを書こうとしたときに起こるエラー、実践的なサンプルコードまでわかりやすく解説します。

1. C#のswitch文にelseは使える?結論はdefaultを使う

C#のswitch文では、if文のようにelseを書くことはできません。

switch文で「どのcaseにも一致しなかった場合」の処理を書きたいときは、elseではなくdefaultを使います。

1-1. C#のswitch文ではelseは使えない

C#のswitch文の中にelseを書くことはできません。

たとえば、次のような書き方はエラーになります。

C#
int number = 3;

switch (number)
{
case 1:
Console.WriteLine("1です");
break;
else:
Console.WriteLine("1以外です");
break;
}

switch文では、分岐条件をcaseで書きます。そして、どのcaseにも当てはまらない場合の処理はdefaultで書きます。

elseif文で使うキーワードであり、switch文の中では使えないと覚えておきましょう。

1-2. elseの代わりにdefaultを書く

switch文でelseのような処理を書きたい場合は、defaultを使います。

C#
int number = 3;

switch (number)
{
case 1:
Console.WriteLine("1です");
break;
default:
Console.WriteLine("1以外です");
break;
}

このコードでは、number1の場合はcase 1の処理が実行されます。

それ以外の値の場合は、defaultの処理が実行されます。

つまり、defaultswitch文における「それ以外」の処理を書く場所です。

1-3. if文のelseとswitch文のdefaultの違い

if文のelseswitch文のdefaultは、どちらも「条件に一致しなかった場合」の処理を書くために使います。

ただし、使う場面が違います。

C#
int number = 3;

if (number == 1)
{
Console.WriteLine("1です");
}
else
{
Console.WriteLine("1以外です");
}

これはif文の例です。

一方、同じ処理をswitch文で書くと次のようになります。

C#
int number = 3;

switch (number)
{
case 1:
Console.WriteLine("1です");
break;
default:
Console.WriteLine("1以外です");
break;
}

if文ではelseを使い、switch文ではdefaultを使います。

役割は似ていますが、書き方は異なります。

1-4. 「どのcaseにも一致しない場合」の処理を書く考え方

switch文では、指定した値を上から順にcaseと照合します。

たとえば、次のコードを見てみましょう。

C#
string rank = "D";

switch (rank)
{
case "A":
Console.WriteLine("優秀です");
break;
case "B":
Console.WriteLine("良いです");
break;
case "C":
Console.WriteLine("普通です");
break;
default:
Console.WriteLine("判定できません");
break;
}

この場合、rank"D"です。

case "A"case "B"case "C"のどれにも一致しないため、defaultの処理が実行されます。

このように、defaultには「想定外の値が来た場合」や「その他の値の場合」に行いたい処理を書きます。

2. C#のswitch文の基本構文

ここからは、C#のswitch文の基本構文を確認していきます。

switch文は、ある値に応じて複数の処理を切り替えたいときに使います。

2-1. switch文の書き方

C#のswitch文は、基本的に次のように書きます。

C#
switch (判定したい値)
{
case 値1:
// 値1の場合の処理
break;

case 値2:
// 値2の場合の処理
break;

default:
// どのcaseにも一致しない場合の処理
break;
}

switchの丸括弧の中には、判定したい値や変数を書きます。

その値がどのcaseに一致するかによって、実行される処理が変わります。

2-2. caseの役割

caseは、switchで判定する値と比較するためのラベルです。

C#
int number = 2;

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

この例では、numberの値が2なので、case 2の処理が実行されます。

caseには、「この値だったらこの処理をする」という分岐先を書きます。

2-3. breakの役割

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

C#
int number = 1;

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

case 1の処理が終わったあと、breakによってswitch文の外へ抜けます。

C#では、基本的に各caseの処理の最後にbreakを書く必要があります。

ただし、returnthrowgoto casegoto defaultなどで処理を明確に移動・終了する場合は、break以外を使うこともあります。

2-4. 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;
}

この例では、number5なので、case 1にもcase 2にも一致しません。

そのため、defaultの処理が実行されます。

defaultは、if文のelseに近い役割を持っています。

2-5. switch文の基本サンプルコード

次は、曜日を判定する基本的なswitch文の例です。

C#
int day = 3;

switch (day)
{
case 1:
Console.WriteLine("月曜日です");
break;
case 2:
Console.WriteLine("火曜日です");
break;
case 3:
Console.WriteLine("水曜日です");
break;
case 4:
Console.WriteLine("木曜日です");
break;
case 5:
Console.WriteLine("金曜日です");
break;
case 6:
Console.WriteLine("土曜日です");
break;
case 7:
Console.WriteLine("日曜日です");
break;
default:
Console.WriteLine("1〜7の数値を入力してください");
break;
}

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

C#
水曜日です

このように、値によって処理を分けたい場合にswitch文は便利です。

3. caseの正しい書き方と注意点

switch文を正しく使うためには、caseの書き方を理解することが大切です。

caseの書き方を間違えると、コンパイルエラーになったり、意図しない処理になったりします。

3-1. caseには比較したい値を書く

caseには、switchで判定する値と比較したい値を書きます。

C#
string color = "red";

switch (color)
{
case "red":
Console.WriteLine("赤です");
break;
case "blue":
Console.WriteLine("青です");
break;
default:
Console.WriteLine("赤でも青でもありません");
break;
}

この例では、colorの値が"red"なので、case "red"の処理が実行されます。

数値だけでなく、文字列もcaseで判定できます。

3-2. 複数のcaseで同じ処理を実行する書き方

複数のcaseで同じ処理を実行したい場合は、caseを続けて書きます。

C#
int month = 1;

switch (month)
{
case 12:
case 1:
case 2:
Console.WriteLine("冬です");
break;

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;

default:
Console.WriteLine("1〜12の数値を入力してください");
break;
}

この例では、month1212のいずれかであれば「冬です」と表示されます。

同じ処理を何度も書かなくて済むため、コードが読みやすくなります。

3-3. caseの中で変数宣言をする場合の注意点

caseの中で変数を宣言する場合は、波括弧{ }でスコープを分けると安全です。

C#
int type = 1;

switch (type)
{
case 1:
{
string message = "タイプ1です";
Console.WriteLine(message);
break;
}

case 2:
{
string message = "タイプ2です";
Console.WriteLine(message);
break;
}

default:
{
string message = "不明なタイプです";
Console.WriteLine(message);
break;
}
}

caseごとに同じ名前の変数を使いたい場合、波括弧でスコープを分けると変数名の衝突を避けられます。

特に初心者のうちは、case内で変数を宣言するときは{ }を付ける書き方にしておくとわかりやすいです。

3-4. caseに書ける値・書けない値

基本的なswitch文では、caseに比較したい値を書きます。

C#
int number = 10;

switch (number)
{
case 10:
Console.WriteLine("10です");
break;
}

一方で、次のように通常のcaseラベルへ条件式を書くことはできません。

C#
int number = 10;

switch (number)
{
case number > 5:
Console.WriteLine("5より大きいです");
break;
}

このような書き方はできません。

条件を追加したい場合は、whenを使う方法があります。

C#
int number = 10;

switch (number)
{
case int n when n > 5:
Console.WriteLine("5より大きいです");
break;
default:
Console.WriteLine("5以下です");
break;
}

単純な値の一致で分岐するならcase 値:を使い、より複雑な条件が必要ならif文やwhenの利用を検討しましょう。

3-5. caseの順番で読みやすさが変わる

caseの順番は、コードの読みやすさに影響します。

たとえば、数値を判定する場合は小さい順に並べると理解しやすくなります。

C#
switch (level)
{
case 1:
Console.WriteLine("初級");
break;
case 2:
Console.WriteLine("中級");
break;
case 3:
Console.WriteLine("上級");
break;
default:
Console.WriteLine("不明");
break;
}

また、よく使われる値を先に書いたり、正常な値を先に書いて最後にdefaultを書くと、コードの意図が伝わりやすくなります。

caseの数が増えるほど、並び順は重要です。

4. defaultの正しい書き方

defaultは、switch文でelseの代わりになる重要な要素です。

必ず書かなければならないわけではありませんが、想定外の値に備えるために書いておくと安全です。

4-1. defaultはelseの代わりになる

C#のswitch文では、elseではなくdefaultを使います。

C#
string command = "delete";

switch (command)
{
case "create":
Console.WriteLine("作成します");
break;
case "update":
Console.WriteLine("更新します");
break;
default:
Console.WriteLine("不明なコマンドです");
break;
}

この例では、command"create"でも"update"でもない場合に、defaultが実行されます。

defaultは、switch文における「その他」の処理です。

4-2. defaultは省略できる

defaultは省略できます。

C#
int number = 3;

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

この場合、number1でも2でもなければ、何も処理されずにswitch文を抜けます。

ただし、想定外の値が来たことに気づきにくくなるため、必要に応じてdefaultを書いておくのがおすすめです。

4-3. defaultを書く位置は最後が一般的

defaultは、構文上は最後以外に書くこともできます。

しかし、一般的には最後に書きます。

C#
switch (status)
{
case 0:
Console.WriteLine("未処理");
break;
case 1:
Console.WriteLine("処理中");
break;
case 2:
Console.WriteLine("完了");
break;
default:
Console.WriteLine("不明なステータス");
break;
}

defaultを最後に置くと、「どのcaseにも一致しなかった場合の処理」であることが直感的にわかります。

特別な理由がない限り、defaultは最後に書きましょう。

4-4. defaultで例外処理やエラーメッセージを書く例

defaultでは、エラーメッセージを表示したり、例外を投げたりすることがあります。

C#
int status = 9;

switch (status)
{
case 0:
Console.WriteLine("未処理です");
break;
case 1:
Console.WriteLine("処理中です");
break;
case 2:
Console.WriteLine("完了です");
break;
default:
throw new ArgumentException("不正なステータスです");
}

この例では、status012以外の場合に例外を投げています。

想定外の値をそのまま処理すると不具合につながる場合は、defaultで明示的にエラーとして扱うと安全です。

4-5. defaultを書いたほうがよいケース

次のような場合は、defaultを書いたほうがよいです。

想定外の入力を検出したい場合、ユーザー入力を判定する場合、外部から受け取ったデータを処理する場合、enumの値を判定する場合などです。

たとえば、ユーザーが入力した文字列を判定する場合は、予期しない入力が来る可能性があります。

C#
string input = "x";

switch (input)
{
case "y":
Console.WriteLine("はい");
break;
case "n":
Console.WriteLine("いいえ");
break;
default:
Console.WriteLine("y または n を入力してください");
break;
}

このように、defaultを使うことで想定外の値にも対応できます。

5. switch文でelseを書こうとするとどうなる?

C#のswitch文でelseを書こうとすると、コンパイルエラーになります。

elseif文で使うキーワードであり、switch文の分岐には使えません。

5-1. switch文内にelseを書くとコンパイルエラーになる

次のコードは正しくありません。

C#
int score = 80;

switch (score)
{
case 100:
Console.WriteLine("満点です");
break;
else:
Console.WriteLine("満点ではありません");
break;
}

switch文の中では、caseまたはdefaultを使って分岐を書きます。

そのため、else:のような書き方はできません。

正しくは次のように書きます。

C#
int score = 80;

switch (score)
{
case 100:
Console.WriteLine("満点です");
break;
default:
Console.WriteLine("満点ではありません");
break;
}

elseを書きたくなったら、switch文ではdefaultを使うと覚えておきましょう。

5-2. 初心者がelseを書きたくなる理由

初心者がswitch文にelseを書きたくなる理由は、if文の考え方に慣れているためです。

if文では、次のように書きます。

C#
if (score == 100)
{
Console.WriteLine("満点です");
}
else
{
Console.WriteLine("満点ではありません");
}

この書き方に慣れていると、switch文でも「それ以外」はelseだと思ってしまいやすいです。

しかし、switch文ではelseではなくdefaultを使います。

C#
switch (score)
{
case 100:
Console.WriteLine("満点です");
break;
default:
Console.WriteLine("満点ではありません");
break;
}

if文のelseswitch文のdefaultは、役割は似ていますが、使う場所が違います。

5-3. if文からswitch文へ書き換えるときの注意点

if文からswitch文へ書き換えるときは、elsedefaultに置き換えます。

たとえば、次のif文があるとします。

C#
if (grade == "A")
{
Console.WriteLine("優秀です");
}
else if (grade == "B")
{
Console.WriteLine("良いです");
}
else
{
Console.WriteLine("判定できません");
}

これをswitch文に書き換えると、次のようになります。

C#
switch (grade)
{
case "A":
Console.WriteLine("優秀です");
break;
case "B":
Console.WriteLine("良いです");
break;
default:
Console.WriteLine("判定できません");
break;
}

else ifcaseに、elsedefaultに対応します。

ただし、すべてのif文をswitch文に書き換えたほうがよいわけではありません。

値の一致で分岐している場合はswitch文が向いていますが、範囲判定や複雑な条件ではif文のほうが自然です。

5-4. else ifとswitch caseの使い分け

else ifswitch caseは、条件分岐に使う点では同じです。

ただし、向いている場面が違います。

else ifは、次のように複雑な条件に向いています。

C#
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else
{
Console.WriteLine("C");
}

一方、switch caseは、特定の値に一致するかどうかを判定する場合に向いています。

C#
switch (rank)
{
case "A":
Console.WriteLine("優秀");
break;
case "B":
Console.WriteLine("良い");
break;
case "C":
Console.WriteLine("普通");
break;
default:
Console.WriteLine("不明");
break;
}

値の一致ならswitch文、範囲や複数条件ならif文を使うと考えるとわかりやすいです。

6. C#のswitch文でよくあるエラーと対処法

C#のswitch文では、casebreakdefaultの書き方を間違えるとエラーになることがあります。

ここでは、初心者がよく遭遇するエラーと対処法を解説します。

6-1. breakを書き忘れた場合のエラー

C#では、caseの処理を書いたあとにbreakなどで処理を終了しないとエラーになることがあります。

C#
int number = 1;

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

このコードでは、case 1の最後にbreakがありません。

C#では、処理が次のcaseへそのまま流れるような書き方は基本的にできません。

正しくは次のように書きます。

C#
int number = 1;

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

caseの処理の最後には、breakを書くのが基本です。

6-2. caseラベルの書き方を間違えた場合

caseラベルでは、コロン:を書き忘れないようにしましょう。

誤った例です。

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

case 1の後に:がないため、エラーになります。

正しくは次のように書きます。

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

case 値:という形で書くのが基本です。

6-3. defaultを書いたのに処理されない場合

defaultを書いたのに実行されない場合は、どれかのcaseに一致している可能性があります。

C#
int number = 2;

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

この例では、number2なのでcase 2が実行されます。

そのため、defaultは実行されません。

defaultは「どのcaseにも一致しなかった場合」にだけ実行されます。

6-4. 型が一致しない場合のエラー

switchで判定する値とcaseの値の型が合っていないと、エラーになることがあります。

C#
int number = 1;

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

この例では、numberint型ですが、caseには文字列の"1"を書いています。

型が合っていないため、正しくありません。

正しくは次のように、数値なら数値で比較します。

C#
int number = 1;

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

文字列を判定したい場合は、switchの対象も文字列にします。

C#
string number = "1";

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

6-5. 到達不能コードになる場合

breakreturnの後に処理を書くと、到達不能コードになることがあります。

C#
switch (number)
{
case 1:
Console.WriteLine("1です");
break;
Console.WriteLine("この行は実行されません");
}

breakswitch文を抜けるため、その後のConsole.WriteLineは実行されません。

正しくは、実行したい処理をbreakの前に書きます。

C#
switch (number)
{
case 1:
Console.WriteLine("1です");
Console.WriteLine("処理を終了します");
break;
}

breakreturnthrowの後には通常の処理を書かないようにしましょう。

7. C#のswitch文をより便利に使う書き方

C#のswitch文は、数値だけでなく文字列やenumにも使えます。

また、whenswitch式を使うことで、より便利に書くこともできます。

7-1. switch文で文字列を判定する

C#のswitch文では、文字列を判定できます。

C#
string command = "start";

switch (command)
{
case "start":
Console.WriteLine("開始します");
break;
case "stop":
Console.WriteLine("停止します");
break;
case "restart":
Console.WriteLine("再起動します");
break;
default:
Console.WriteLine("不明なコマンドです");
break;
}

文字列によって処理を分けたい場合にも、switch caseは便利です。

コマンド名、入力値、区分コードなどの判定に使いやすい書き方です。

7-2. switch文でenumを判定する

enumを使うと、決められた種類の値をわかりやすく扱えます。

C#
enum OrderStatus
{
Pending,
Processing,
Completed,
Canceled
}

このenumswitch文で判定すると、次のように書けます。

C#
OrderStatus status = OrderStatus.Completed;

switch (status)
{
case OrderStatus.Pending:
Console.WriteLine("注文は未処理です");
break;
case OrderStatus.Processing:
Console.WriteLine("注文を処理中です");
break;
case OrderStatus.Completed:
Console.WriteLine("注文は完了しました");
break;
case OrderStatus.Canceled:
Console.WriteLine("注文はキャンセルされました");
break;
default:
Console.WriteLine("不明な注文状態です");
break;
}

enumswitch文を組み合わせると、状態ごとの処理を整理しやすくなります。

7-3. whenを使って条件を追加する

switch文では、whenを使って条件を追加できます。

C#
int score = 85;

switch (score)
{
case int n when n >= 90:
Console.WriteLine("A評価です");
break;
case int n when n >= 70:
Console.WriteLine("B評価です");
break;
case int n when n >= 50:
Console.WriteLine("C評価です");
break;
default:
Console.WriteLine("D評価です");
break;
}

このように、whenを使うと単純な値の一致だけでなく、条件付きの分岐も書けます。

ただし、条件が複雑になりすぎる場合は、if文のほうが読みやすいこともあります。

7-4. switch式でより短く書く

C#では、switch文だけでなくswitch式も使えます。

switch式を使うと、値を返す分岐を短く書けます。

C#
int day = 3;

string dayName = day switch
{
1 => "月曜日",
2 => "火曜日",
3 => "水曜日",
4 => "木曜日",
5 => "金曜日",
6 => "土曜日",
7 => "日曜日",
_ => "不明な曜日"
};

Console.WriteLine(dayName);

switch式は、条件に応じて値を代入したい場合に便利です。

switch文よりも短く書けるため、戻り値を作る処理に向いています。

7-5. switch式ではdefaultの代わりに_を使う

switch式では、defaultの代わりに_を使うのが一般的です。

C#
string rank = "S";

string message = rank switch
{
"A" => "優秀です",
"B" => "良いです",
"C" => "普通です",
_ => "判定できません"
};

この_は、どの条件にも一致しなかった場合を表します。

つまり、switch文のdefaultに近い役割です。

switch文ではdefaultswitch式では_を使うと覚えておくとよいでしょう。

8. switch文とif文はどちらを使うべき?

C#では、条件分岐にswitch文とif文のどちらも使えます。

どちらを使うべきかは、条件の内容によって変わります。

8-1. 値の一致で分岐するならswitch文

ある値が、特定の値と一致するかどうかで分岐するならswitch文が向いています。

C#
string role = "admin";

switch (role)
{
case "admin":
Console.WriteLine("管理者です");
break;
case "user":
Console.WriteLine("一般ユーザーです");
break;
case "guest":
Console.WriteLine("ゲストです");
break;
default:
Console.WriteLine("不明な権限です");
break;
}

このように、同じ変数に対して複数の値を比較する場合は、switch caseを使うと見やすくなります。

8-2. 複雑な条件分岐ならif文

範囲判定や複数条件を組み合わせる場合は、if文のほうが自然です。

C#
if (score >= 80 && attendanceRate >= 90)
{
Console.WriteLine("合格です");
}
else if (score >= 80 || attendanceRate >= 90)
{
Console.WriteLine("再評価です");
}
else
{
Console.WriteLine("不合格です");
}

このように、>=<=&&||などを使う条件では、if文のほうが読みやすくなります。

switch文でもwhenを使えば条件を追加できますが、複雑になりすぎる場合はif文を選びましょう。

8-3. elseが必要な処理はif文のほうが自然な場合もある

「条件に当てはまる場合」と「それ以外」の2択だけなら、if elseのほうが自然な場合があります。

C#
if (isLogin)
{
Console.WriteLine("ログイン中です");
}
else
{
Console.WriteLine("ログインしていません");
}

このような単純な真偽値の判定をswitch文で書く必要はあまりありません。

switch文は複数の値を分岐する場面に向いています。

elseを使いたい場面では、無理にswitch文にせず、if文を使うほうが読みやすいこともあります。

8-4. 可読性を重視した使い分け

switch文とif文の使い分けでは、可読性を重視しましょう。

同じ変数の値を何度も比較している場合は、switch文のほうが読みやすくなります。

C#
if (status == 0)
{
Console.WriteLine("未処理");
}
else if (status == 1)
{
Console.WriteLine("処理中");
}
else if (status == 2)
{
Console.WriteLine("完了");
}
else
{
Console.WriteLine("不明");
}

このようなコードは、switch文にすると整理できます。

C#
switch (status)
{
case 0:
Console.WriteLine("未処理");
break;
case 1:
Console.WriteLine("処理中");
break;
case 2:
Console.WriteLine("完了");
break;
default:
Console.WriteLine("不明");
break;
}

どちらでも書ける場合は、後から読む人にとってわかりやすいほうを選ぶことが大切です。

9. C#のswitch文・case・defaultの実践サンプル

最後に、C#のswitch文、casedefaultを使った実践的なサンプルを紹介します。

数値、文字列、想定外の値、if文からの書き換え、switch式の例を順番に見ていきましょう。

9-1. 数値を判定するswitch文

数値を判定する基本的な例です。

C#
int menu = 2;

switch (menu)
{
case 1:
Console.WriteLine("新規作成");
break;
case 2:
Console.WriteLine("編集");
break;
case 3:
Console.WriteLine("削除");
break;
default:
Console.WriteLine("正しいメニュー番号を選択してください");
break;
}

menu2なので、「編集」と表示されます。

メニュー番号やステータスコードのように、数値によって処理を分けたい場合に使いやすい書き方です。

9-2. 文字列を判定するswitch文

次は、文字列を判定する例です。

C#
string action = "save";

switch (action)
{
case "save":
Console.WriteLine("保存します");
break;
case "load":
Console.WriteLine("読み込みます");
break;
case "exit":
Console.WriteLine("終了します");
break;
default:
Console.WriteLine("不明な操作です");
break;
}

action"save"なので、「保存します」と表示されます。

コマンド名や入力文字列を判定する場合にも、switch caseは便利です。

9-3. defaultで想定外の値を処理する例

defaultを使うと、想定外の値を処理できます。

C#
int userType = 9;

switch (userType)
{
case 1:
Console.WriteLine("一般ユーザーです");
break;
case 2:
Console.WriteLine("管理者です");
break;
case 3:
Console.WriteLine("ゲストです");
break;
default:
Console.WriteLine("不正なユーザー種別です");
break;
}

userType123以外の場合は、defaultが実行されます。

このように、defaultを書いておくと予期しない値にも対応できます。

9-4. if文をswitch文に書き換える例

次のようなif文があるとします。

C#
string plan = "pro";

if (plan == "free")
{
Console.WriteLine("無料プランです");
}
else if (plan == "standard")
{
Console.WriteLine("標準プランです");
}
else if (plan == "pro")
{
Console.WriteLine("プロプランです");
}
else
{
Console.WriteLine("不明なプランです");
}

このコードは、同じ変数planの値を何度も比較しています。

このような場合は、switch文に書き換えると読みやすくなります。

C#
string plan = "pro";

switch (plan)
{
case "free":
Console.WriteLine("無料プランです");
break;
case "standard":
Console.WriteLine("標準プランです");
break;
case "pro":
Console.WriteLine("プロプランです");
break;
default:
Console.WriteLine("不明なプランです");
break;
}

else ifで値の一致を繰り返している場合は、switch caseへの書き換えを検討するとよいでしょう。

9-5. switch式で書き換える例

値を返すだけの分岐であれば、switch式を使うとさらに短く書けます。

まず、通常のswitch文の例です。

C#
int level = 2;
string levelName;

switch (level)
{
case 1:
levelName = "初級";
break;
case 2:
levelName = "中級";
break;
case 3:
levelName = "上級";
break;
default:
levelName = "不明";
break;
}

Console.WriteLine(levelName);

これをswitch式で書くと、次のようになります。

C#
int level = 2;

string levelName = level switch
{
1 => "初級",
2 => "中級",
3 => "上級",
_ => "不明"
};

Console.WriteLine(levelName);

switch式では、defaultの代わりに_を使います。

値を代入するだけの分岐なら、switch式のほうがすっきり書けます。

まとめ

C#のswitch文では、elseは使えません。

if文でいうelseのように、「どの条件にも一致しない場合」の処理を書きたいときは、defaultを使います。

switch文の基本は、switchで判定したい値を指定し、caseで一致する値ごとの処理を書き、各処理の最後にbreakを書く形です。

C#
switch (value)
{
case 1:
Console.WriteLine("1です");
break;
default:
Console.WriteLine("それ以外です");
break;
}

caseは特定の値に一致した場合の処理、defaultはどのcaseにも一致しなかった場合の処理です。

また、switch文では文字列やenumの判定もでき、whenを使えば条件を追加することもできます。値を返すだけの分岐であれば、switch式を使うことでより短く書けます。

C#でswitch case elseのように書きたくなった場合は、elseではなくdefaultを使うと覚えておきましょう。