C#のswitch文にelseは使える?case・defaultの正しい書き方を解説
はじめに
C#で条件分岐を書くときによく使うのがswitch文です。特定の値に応じて処理を分けたい場合、if文よりもswitch caseを使ったほうが読みやすくなることがあります。
一方で、C#を学び始めたばかりの人が迷いやすいのが「switch文にelseは使えるのか?」という点です。
結論からいうと、C#のswitch文ではelseは使えません。if文のelseに相当する処理を書きたい場合は、defaultを使います。
この記事では、C#のswitch文におけるcase、default、breakの正しい書き方や、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で書きます。
elseはif文で使うキーワードであり、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;
}
このコードでは、numberが1の場合はcase 1の処理が実行されます。
それ以外の値の場合は、defaultの処理が実行されます。
つまり、defaultはswitch文における「それ以外」の処理を書く場所です。
1-3. if文のelseとswitch文のdefaultの違い
if文のelseとswitch文の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を書く必要があります。
ただし、return、throw、goto case、goto 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;
}
この例では、numberが5なので、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;
}
dayが3なので、実行結果は次のようになります。
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;
}
この例では、monthが12、1、2のいずれかであれば「冬です」と表示されます。
同じ処理を何度も書かなくて済むため、コードが読みやすくなります。
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;
}
この場合、numberが1でも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("不正なステータスです");
}
この例では、statusが0、1、2以外の場合に例外を投げています。
想定外の値をそのまま処理すると不具合につながる場合は、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を書こうとすると、コンパイルエラーになります。
elseはif文で使うキーワードであり、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文のelseとswitch文のdefaultは、役割は似ていますが、使う場所が違います。
5-3. if文からswitch文へ書き換えるときの注意点
if文からswitch文へ書き換えるときは、elseをdefaultに置き換えます。
たとえば、次の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 ifはcaseに、elseはdefaultに対応します。
ただし、すべてのif文をswitch文に書き換えたほうがよいわけではありません。
値の一致で分岐している場合はswitch文が向いていますが、範囲判定や複雑な条件ではif文のほうが自然です。
5-4. else ifとswitch caseの使い分け
else ifとswitch 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文では、caseやbreak、defaultの書き方を間違えるとエラーになることがあります。
ここでは、初心者がよく遭遇するエラーと対処法を解説します。
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;
}
この例では、numberが2なのでcase 2が実行されます。
そのため、defaultは実行されません。
defaultは「どのcaseにも一致しなかった場合」にだけ実行されます。
6-4. 型が一致しない場合のエラー
switchで判定する値とcaseの値の型が合っていないと、エラーになることがあります。
C#int number = 1;
switch (number)
{
case "1":
Console.WriteLine("1です");
break;
}
この例では、numberはint型ですが、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. 到達不能コードになる場合
breakやreturnの後に処理を書くと、到達不能コードになることがあります。
C#switch (number)
{
case 1:
Console.WriteLine("1です");
break;
Console.WriteLine("この行は実行されません");
}
breakでswitch文を抜けるため、その後のConsole.WriteLineは実行されません。
正しくは、実行したい処理をbreakの前に書きます。
C#switch (number)
{
case 1:
Console.WriteLine("1です");
Console.WriteLine("処理を終了します");
break;
}
break、return、throwの後には通常の処理を書かないようにしましょう。
7. C#のswitch文をより便利に使う書き方
C#のswitch文は、数値だけでなく文字列やenumにも使えます。
また、whenやswitch式を使うことで、より便利に書くこともできます。
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
}
このenumをswitch文で判定すると、次のように書けます。
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;
}
enumとswitch文を組み合わせると、状態ごとの処理を整理しやすくなります。
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文ではdefault、switch式では_を使うと覚えておくとよいでしょう。
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文、case、defaultを使った実践的なサンプルを紹介します。
数値、文字列、想定外の値、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;
}
menuが2なので、「編集」と表示されます。
メニュー番号やステータスコードのように、数値によって処理を分けたい場合に使いやすい書き方です。
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;
}
userTypeが1、2、3以外の場合は、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を使うと覚えておきましょう。

