【2026年7月最新】C# switch-case文完全ガイド|数値・文字列条件分岐・switch式・実務活用まで徹底解説

「C#でプログラムを書いているが、条件分岐の書き方が複数あって、どれをいつ使えばいいか分からない」——そんな疑問を抱えている方は多いはずです。

C#開発において、条件分岐の実装方法は、コードの読みやすさ・保守しやすさに直結します。中でもswitch-case文は、複数の選択肢から1つを選ぶ処理に特化した構文です。if-elseを何重にも重ねるより、はるかにスッキリ書けます。さらにC# 8.0以降では、switch式(switch expression)という新しい書き方も登場し、より簡潔なコードが実現できるようになりました。

この記事では、C#のswitch-case文を基本構文から実務パターンまで、非エンジニアの経営者・マネージャーにも理解できるように解説します。業務システムの設計担当者や、エンジニアチームにコードレビューを行う立場の方にも役立つ内容です。

代表菅澤 代表菅澤
switch-case文を「業務フローの分岐表」と考えると、非常に理解しやすくなります。「顧客ランクがGoldなら◯◯の割引、Silverなら◯◯、その他は通常料金」といった判断を、プログラムで表現したものがswitch-caseです。
AI鬼管理山崎 AI鬼管理山崎
この記事を読み終えると、C#のswitch-case文の基本から応用まで全て理解できます。さらに、Claude Codeを使えばswitch文のロジック設計そのものをAIに任せられる、という実践的な活用法もご紹介します。

この記事を最後まで読むと、以下のことが明確になります。

✔️switch-case文の基本構文と、if-elseとの違いを正確に理解できる
✔️数値・文字列・enumなど各データ型でのswitch-caseの書き方がわかる
✔️複数条件のまとめ方やdefaultケースの設計方法を習得できる
✔️C# 8.0以降のswitch式の書き方と旧来との使い分けがわかる
✔️業務システムへの具体的な適用例を通じて実践的な設計イメージが持てる
✔️Claude CodeでAIがswitch文を自動生成するデモを体験できる
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年7月最新】C# switch-case文完全ガイド|数値・文字列条件分岐・switch式・実務活用まで徹底解説
C#のswitch-case文を完全解説。数値・文字列での条件分岐の書き方から、複数条件のまとめ方、C# 8.0以降のswitch式、if-elseとの使い分け、業務システムへの実践活用まで非エンジニア向けにわかりやすく解説します。

01 switch-case文とは何か――条件分岐の基礎と業務フローへの対応 業務フローの「分岐表」をコードで表現する構文

C#のswitch-case文は、ある変数の値に応じて異なる処理を実行するための制御構文です。「条件分岐」の一種ですが、if-elseとは異なり、複数の値を比較して対応する処理を選択するという形に特化しています。

ビジネスの現場で例えると、料金テーブルや等級制度に基づく判断がまさにswitch-caseに対応します。「会員ランクがPlatinumなら20%割引、Goldなら10%割引、Silverなら5%割引、それ以外は通常料金」という業務ルールを、switch-caseは非常にシンプルに表現できます。

📚 用語解説

switch-case文:ある変数の値を複数の候補(case)と比較し、一致したcaseの処理を実行する制御構造。JavaやC#などの言語で採用されています。「分岐表」や「場合分けリスト」をプログラムで表現したものです。

1-1. switch-case文が登場した背景

プログラミングでは、「条件によって異なる処理をする」場面は非常に多く発生します。最も基本的な方法はif-else文ですが、比較する値が5種類、10種類と増えると、if-else文はネスト(入れ子)が深くなり、読みにくいコードになります。

switch-case文は、「同一の変数を複数の定数値と比較する」というパターンに特化して生まれました。if-elseと比べて条件が一列に並ぶため、視覚的に「どの値のときどの処理か」がひと目でわかります。

変数の値を評価
case 1 と一致?
case 2 と一致?
default 処理
処理実行 & break
代表菅澤 代表菅澤
switch-caseは言わば「複数の選択肢がある業務マニュアル」のコード版です。「受注ステータスが"pending"なら通知メール送信、"approved"なら請求書発行、"rejected"なら担当者に警告」といったフローをそのままコードにできます。

1-2. if-elseとswitch-caseの根本的な違い

両者を一言で区別するなら、if-elseは「条件式で分岐」、switch-caseは「値の一致で分岐」です。if-elseは「x > 0」「y == null」「文字列が空でない」など、複雑な条件式を書けます。一方switch-caseは「変数の値が10なら」「変数の値が"admin"なら」という値の一致比較に限定されます。

比較項目if-else文switch-case文
条件の種類任意の条件式(比較・論理演算など)変数と定数値の一致比較
比較対象の型任意整数・文字列・enum(C#の場合)
可読性(選択肢が多い場合)複雑になりがち一覧性が高くスッキリ
パフォーマンス条件を順番に評価コンパイラがジャンプテーブルに最適化可能
複数条件のまとめ||(OR)で連結複数caseラベルを並べる
範囲指定可能(x >= 10 など)基本不可(switch式でwhenを使えば可能)
💡 使い分けの基本方針

switch-caseは「同じ変数の値を、5つ以上の定数値と比較する」ときに選びましょう。3〜4つ程度の単純な分岐はif-elseで十分です。コードレビューで「このif-elseはswitch-caseで書けないか?」と問われた場合は、選択肢が多いケースが候補になります。

02 基本構文と最もシンプルなswitch-caseの書き方 breakとdefaultを含む完全な基本パターンを理解する

C#のswitch-case文の基本構文を確認しましょう。コードを書いたことがない方でも、ビジネス上の意味と対応付けながら読むことができます。

// 基本的なswitch-case文の構造
int customerRank = 2;

switch (customerRank)
{
    case 1:
        Console.WriteLine("Platinumランク:20%割引");
        break;
    case 2:
        Console.WriteLine("Goldランク:10%割引");
        break;
    case 3:
        Console.WriteLine("Silverランク:5%割引");
        break;
    default:
        Console.WriteLine("通常ランク:割引なし");
        break;
}
// 出力: Goldランク:10%割引

このコードを読み解くと、構造は非常にシンプルです。switch(変数)の括弧内に比較したい変数を書き、その後の波括弧{ }の中にcase 値:の形でケースを並べます。

📚 用語解説

break文:switch-caseのcaseブロックの末尾に書くキーワード。これがないと、一致したcaseの処理が終わっても次のcaseへ「落ちて(フォールスルーして)」処理が続いてしまいます。C#ではフォールスルーは基本的に禁止されており、breakを書かないとコンパイルエラーになります。

2-1. 各要素の役割

switch-case文を構成する各要素の役割を整理します。

✔️switch(変数):比較対象の変数を指定します。整数・文字列・enumが使えます
✔️case 値::変数がこの値と一致したとき、直後の処理が実行されます
✔️break;:ケースの処理終了を宣言。必ずcaseブロックの末尾に書きます
✔️default::どのcaseにも一致しなかった場合の処理。省略可能ですが記述を推奨します
AI鬼管理山崎 AI鬼管理山崎
C#では「フォールスルー(fall-through)」と呼ばれる、breakを省略して次のcaseに処理が流れる動作は基本的に禁止されています。Javaなどでは意図的にフォールスルーを使う場面がありますが、C#ではコンパイルエラーになります。ただし、caseラベルを複数並べる場合は例外です(後述)。

2-2. switch-caseの処理フロー

switch-case文が実行されると、以下の流れで処理が進みます。

switch(変数)を評価
上から順にcaseを比較
一致したcaseの処理を実行
breakでswitch文を抜ける
次の処理へ続行
⚠️ C#でのbreak忘れに注意

C#はフォールスルーを許可していないため、breakを書き忘れるとコンパイルエラー「制御は1つのcase句から別のcase句に流れることはできません」が発生します。エラーメッセージが出たら、まずbreakの付け忘れを確認してください。

03 数値での条件分岐――スコア・等級・ランク判定の実例 整数値を使ったswitch-caseの実務パターンを習得する

数値による条件分岐は、switch-caseの最も基本的な使い方です。スコア判定・等級分け・曜日判定など、業務システムに頻繁に登場します。

3-1. スコアによる評価ランク判定

試験や業績評価でよく使われる「スコア帯によるランク判定」を実装してみましょう。ポイントは、score / 10という整数除算で、10点刻みのグループに分類していることです。

// スコアによる評価ランク判定
int score = 85;

switch (score / 10)
{
    case 10:
    case 9:
        Console.WriteLine("S評価:優秀");
        break;
    case 8:
        Console.WriteLine("A評価:良好");
        break;
    case 7:
        Console.WriteLine("B評価:標準");
        break;
    case 6:
        Console.WriteLine("C評価:要改善");
        break;
    default:
        Console.WriteLine("D評価:要サポート");
        break;
}
// score=85の場合: A評価:良好

このパターンで重要なのは、case 10: case 9:のように複数のcaseラベルを連続して書けることです。90〜100点(10の位が9か10)をまとめて同じ処理にしています。詳細は後述のセクション5で解説します。

3-2. 曜日判定の実装例

DayOfWeek列挙型(enum)を使った曜日別の処理分岐は、業務システムでよく使われるパターンです。

// DayOfWeekを使った曜日判定
DayOfWeek today = DateTime.Now.DayOfWeek;

switch (today)
{
    case DayOfWeek.Monday:
        Console.WriteLine("週次レポートを送信します");
        break;
    case DayOfWeek.Wednesday:
        Console.WriteLine("中間進捗を確認します");
        break;
    case DayOfWeek.Friday:
        Console.WriteLine("週報を作成します");
        break;
    case DayOfWeek.Saturday:
    case DayOfWeek.Sunday:
        Console.WriteLine("休日のため処理をスキップ");
        break;
    default:
        Console.WriteLine("通常業務日");
        break;
}
代表菅澤 代表菅澤
DayOfWeekのようなenum型はswitch-caseと非常に相性が良い。Visual StudioやCursorなどのIDEを使っていれば、switch文を書き始めた段階でenumの全ケースを自動補完してくれます。

📚 用語解説

enum(列挙型):複数の定数をまとめて名前をつけたデータ型。DayOfWeek(曜日)、OrderStatus(注文ステータス)など、決まった選択肢がある場面で使います。switch-caseとの組み合わせで、「選択肢の漏れ」をコンパイラが検出できるようになります。

💡 enumとswitch-caseを組み合わせるメリット

enumをswitch-caseで使う最大の利点は、IDEが「未処理のenumケースがある」と警告を出してくれることです。OrderStatusに新しいステータスを追加したとき、switch文で処理が漏れているとIDEやClaude Codeが教えてくれます。これはシステムの安全性を大きく高めます。

Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 文字列での条件分岐――コマンド・ステータス・業種別処理 stringを使ったswitch-caseの実務パターンと注意点

C#のswitch-case文は文字列(string型)にも対応しています。コマンドの振り分け、ステータス名による処理分岐、API レスポンスの種別判定など、実務での活用場面が非常に多いです。

// 注文ステータスによる処理振り分け(文字列版)
string orderStatus = "approved";

switch (orderStatus)
{
    case "pending":
        Console.WriteLine("注文確認メールを送信");
        SendConfirmationEmail();
        break;
    case "approved":
        Console.WriteLine("承認済:請求書を発行");
        GenerateInvoice();
        break;
    case "shipped":
        Console.WriteLine("発送済:追跡番号を通知");
        SendTrackingNotification();
        break;
    case "cancelled":
        Console.WriteLine("キャンセル:返金処理を開始");
        InitiateRefund();
        break;
    default:
        Console.WriteLine($"未知のステータス: {orderStatus}");
        LogUnknownStatus(orderStatus);
        break;
}

文字列switch-caseで注意すべき点があります。C#の文字列比較は大文字・小文字を区別(case-sensitive)します。"approved"と"Approved"は異なる値として扱われ、一致しません。

⚠️ 文字列の大文字・小文字に注意

"approved"と"Approved"はC#のswitch-caseでは別物として扱われます。外部APIやユーザー入力から受け取った文字列をswitch-caseで分岐する場合は、事前にToLower()ToUpper()で大文字・小文字を統一することを推奨します。

// 大文字・小文字を統一してからswitch-caseで比較する安全なパターン
string userInput = "APPROVED"; // 外部から来た値

switch (userInput.ToLower())  // 小文字に統一してから比較
{
    case "approved":
        Console.WriteLine("承認済み");
        break;
    case "pending":
        Console.WriteLine("保留中");
        break;
    default:
        Console.WriteLine("不明なステータス");
        break;
}

4-1. 文字列switch-caseの実務活用例

業務システムで文字列switch-caseが活躍する代表的なシーンを紹介します。

✔️APIコマンドの振り分け:HTTPリクエストのアクション種別("create", "update", "delete")を分岐
✔️業種別・部門別の処理:顧客の業種コード("manufacturing", "retail", "service")で異なる帳票を生成
✔️言語切り替え:ロケール文字列("ja", "en", "zh")でUIテキストを切り替え
✔️エラーコードの判別:APIエラーコード文字列("AUTH_ERROR", "NOT_FOUND"等)で適切なメッセージを表示
✔️権限レベルの判定:ユーザーロール文字列("admin", "manager", "viewer")でアクセス制御
AI鬼管理山崎 AI鬼管理山崎
文字列switch-caseは、外部APIやデータベースから来た値をそのまま使いたいときに便利です。ただし入力値を信頼しすぎないよう、defaultケースで「想定外の値」を必ずハンドリングする設計が安全です。

📚 用語解説

case-sensitive(ケースセンシティブ):文字の大文字と小文字を区別すること。C#の文字列比較はデフォルトでcase-sensitiveです。"Apple"と"apple"は異なる文字列として扱われます。switch-caseで外部入力を扱う際は、この性質を常に意識する必要があります。

05 複数条件を1つのcaseにまとめる方法 同じ処理を複数の値で共有するパターン

「Aの値でもBの値でも、同じ処理を実行したい」という場面は業務システムで頻繁に発生します。C#では複数のcaseラベルを連続して書くことで、これを簡潔に実装できます。

// 複数のcaseラベルで同じ処理を共有するパターン
string paymentMethod = "paypay";

switch (paymentMethod)
{
    case "credit_card":
    case "debit_card":
        Console.WriteLine("カード決済:手数料3%加算");
        ApplyCardFee(3);
        break;

    case "paypay":
    case "line_pay":
    case "merpay":
        Console.WriteLine("QRコード決済:手数料なし");
        break;

    case "bank_transfer":
        Console.WriteLine("銀行振込:3営業日で確認");
        break;

    default:
        Console.WriteLine("不明な決済方法");
        break;
}
// 出力: QRコード決済:手数料なし

複数のcaseラベルを並べるとき、各caseにはbreakもコードも書かず、最後のcaseラベルの直後に処理とbreakを書く形になります。これがC#で許可される唯一のフォールスルーパターンです。

💡 連続するcaseラベルの書き方のコツ

複数条件をまとめる場合、似たグループはまとめて書き、グループ間には空行を入れると読みやすくなります。「クレジット系」「QRコード系」「銀行振込」のようにグループ化すると、コードが業務マニュアルのように読めます。

5-1. 季節・期間によるグループ分岐の例

// 月次処理のグループ分岐(Q1〜Q4対応)
int month = DateTime.Now.Month;
string quarter;

switch (month)
{
    case 1:
    case 2:
    case 3:
        quarter = "Q1(1〜3月)";
        RunQ1Report();
        break;
    case 4:
    case 5:
    case 6:
        quarter = "Q2(4〜6月)";
        RunQ2Report();
        break;
    case 7:
    case 8:
    case 9:
        quarter = "Q3(7〜9月)";
        RunQ3Report();
        break;
    default:
        quarter = "Q4(10〜12月)";
        RunQ4Report();
        break;
}
Console.WriteLine($"現在の四半期: {quarter}");
代表菅澤 代表菅澤
四半期別の処理分岐は、財務システムや営業管理ツールで必ずと言っていいほど登場します。switch-caseで書くと、「どの月がどのQ」かが一目瞭然になり、コードレビューが格段に楽になります。

06 defaultケースの重要性と安全な設計 想定外の入力を守る防衛的プログラミングの実践

switch-case文のdefaultケースは省略可能ですが、実務では必ず書くべきです。defaultがないと、想定外の値が入力されたときに何も起きず、バグの原因が特定しにくくなります。

📚 用語解説

防衛的プログラミング(Defensive Programming):予期しない入力やエラーが発生しても、システムが安全に動作するよう設計する考え方。switch-caseのdefaultケースでログを残したり例外をスローしたりすることが、防衛的プログラミングの実践例の一つです。

// defaultケースを活用した安全な設計
string userRole = GetUserRoleFromDatabase();

switch (userRole)
{
    case "admin":
        ShowAdminDashboard();
        break;
    case "manager":
        ShowManagerDashboard();
        break;
    case "viewer":
        ShowReadOnlyView();
        break;
    default:
        // 想定外のロールはログに記録して例外をスロー
        Logger.Error($"未定義のユーザーロール: {userRole} - UserID: {currentUserId}");
        throw new InvalidOperationException($"未サポートのロール: {userRole}");
}

defaultケースで例外をスローするパターンは、セキュリティ上も重要です。もし何者かが不正なロール文字列を注入しようとした場合、この設計であればシステムが異常を検知・記録して処理を停止します。

⚠️ defaultなしは「サイレント障害」の温床

defaultケースを書かない場合、想定外の値が来ても何も起きません。「なぜか処理がスキップされる」「データが更新されない」といった原因不明のバグに発展しやすいです。実務コードでは必ずdefaultを書き、ログ出力か例外スローで問題を可視化しましょう。

6-1. defaultの配置位置について

C#ではdefaultケースはswitch文の末尾に書くのが一般的ですが、構文上は中間や先頭にも置けます。ただし可読性の観点から、末尾推奨です。また、defaultは必ず1つだけ書けます(2つ書くとコンパイルエラー)。

💡 defaultの使い分けパターン3種

①軽微な場合はログを残してデフォルト動作(通常料金を適用など)、②重大な場合は例外をスロー、③テスト環境では Console.Writelineでデバッグ情報出力——この3パターンを状況に応じて使い分けましょう。

Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 C# 8.0以降のswitch式(switch expression) 旧来のswitch文よりも簡潔に書ける新しい構文

C# 8.0(2019年リリース)から、switch式(switch expression)という新しい構文が追加されました。旧来のswitch文と比べて、より簡潔でエレガントな書き方ができます。

📚 用語解説

switch式(switch expression):C# 8.0で追加された構文。旧来のswitch「文」は処理を実行するためのものですが、switch「式」は値を返すために使います。変数への代入や、メソッドの引数として直接使えます。Javaのswitch expressionと同様の概念です。

7-1. switch文とswitch式の書き比べ

同じロジックを、旧来のswitch文とswitch式で書き比べてみましょう。

// 旧来のswitch文(C# 8.0以前)
string discountOld;
int memberLevel = 2;

switch (memberLevel)
{
    case 1: discountOld = "20%"; break;
    case 2: discountOld = "10%"; break;
    case 3: discountOld = "5%";  break;
    default: discountOld = "0%"; break;
}
Console.WriteLine($"割引: {discountOld}");
// C# 8.0以降のswitch式
int memberLevel = 2;

string discount = memberLevel switch
{
    1 => "20%",
    2 => "10%",
    3 => "5%",
    _ => "0%"
};
Console.WriteLine($"割引: {discount}");
// 出力: 割引: 10%

switch式の特徴は以下の通りです。

✔️変数名を先に書くmemberLevel switch { ... }の形式
✔️caseキーワード不要:値を直接書いて=>で結果を指定
✔️breakが不要:各ケースの末尾は,(カンマ)で区切る
✔️_がdefaultに相当:アンダースコア_がすべてのケースにマッチ(ワイルドカードパターン)
✔️値を直接返せる:変数に代入したり、メソッドの戻り値として直接使える

7-2. whenキーワードによる条件付きパターンマッチング

switch式ではwhenキーワードを使って、値の範囲指定など、より複雑な条件を書けます。

// whenを使った範囲指定パターン(C# 9.0以降のパターンマッチング)
int score = 85;

string grade = score switch
{
    >= 90 => "S評価:優秀",
    >= 80 => "A評価:良好",
    >= 70 => "B評価:標準",
    >= 60 => "C評価:要改善",
    _      => "D評価:要サポート"
};
Console.WriteLine(grade);
// 出力: A評価:良好
AI鬼管理山崎 AI鬼管理山崎
C# 9.0以降では>=のような関係演算子もパターンとして直接書けるようになっています。これにより、「範囲で分岐したいけどswitch-caseが使えない」という制限がほぼ解消されました。
💡 switch式はいつ使うべきか

switch式は「ある値から別の値を導出する」(値の変換・マッピング)に最適です。複数の処理を実行する(メソッドを呼ぶ、ログを書く、状態を変える)ケースでは、旧来のswitch文のほうがコードの意図が明確です。「変換はswitch式、手続きはswitch文」と覚えておくと良いでしょう。

08 switch vs if-else の使い分け判断基準 状況に応じて最適な条件分岐構文を選ぶ

「switch-caseかif-elseか」という選択は、C#開発者が日常的に直面する判断です。それぞれの特性を理解して、適切に使い分けましょう。

比較対象の変数は1つ?
定数値と一致比較?
選択肢は4つ以上?
switch-caseを選ぶ
if-elseを選ぶ

8-1. switchを選ぶべきケース

以下のすべてに当てはまる場合、switch-caseが適しています。

✔️同じ変数の値を複数の定数値と比較している
✔️比較する選択肢が4つ以上ある(3つ以下ならif-elseでも十分)
✔️整数・文字列・enumのいずれかを使っている
✔️コードを読む人に「どの値のときどの処理か」を一覧で見せたい

8-2. if-elseを選ぶべきケース

以下のいずれかに当てはまる場合、if-elseが適しています。

✔️x > 100name != nullのような範囲・論理条件が必要
✔️複数の異なる変数を同時に条件にしたい(if (a > 0 && b != null)等)
✔️2〜3つ程度の簡単な分岐(switch-caseを使うほどでもない)
✔️null チェックを含む(switch-caseでのnullは扱いに注意が必要)
判断基準switch-caseを選ぶif-elseを選ぶ
比較の種類値の一致比較のみ範囲・論理式・複合条件
比較変数の数1変数複数変数を組み合わせ可
選択肢の数4つ以上3つ以下
コードの意図「この変数が◯◯の値ならば」「この条件が満たされるならば」
保守性選択肢の追加がしやすい条件が増えるとネストが深くなる
代表菅澤 代表菅澤
ビジネス上の判断ルールを見て「この値なら◯◯、この値なら◯◯」という形の業務ロジックは、ほぼswitch-caseで実装できます。逆に「この金額が予算を超えた場合かつ責任者の承認がない場合」のような複合条件はif-elseの出番です。

09 業務システムへの実践適用例 受注・在庫・権限管理など実務コードでのswitch-caseパターン

ここでは、実際の業務システム開発でswitch-caseがどのように使われるか、3つの実践パターンを紹介します。

9-1. 受注ステータス管理システム

ECサイトや受発注システムで必須となる、注文ステータスに応じた処理の振り分けです。

// 受注ステータス管理:ステータスごとの処理振り分け
public class OrderProcessor
{
    public void ProcessOrder(Order order)
    {
        switch (order.Status)
        {
            case OrderStatus.Received:
                SendOrderConfirmation(order);
                NotifyWarehouse(order);
                break;

            case OrderStatus.Processing:
                UpdateInventory(order);
                break;

            case OrderStatus.Shipped:
                SendShippingNotification(order);
                UpdateDeliveryTracking(order);
                break;

            case OrderStatus.Delivered:
                SendDeliveryConfirmation(order);
                RequestReview(order);
                break;

            case OrderStatus.Cancelled:
                InitiateRefund(order);
                RestoreInventory(order);
                break;

            default:
                throw new InvalidOperationException(
                    $"未対応のステータス: {order.Status}");
        }
    }
}

9-2. 権限レベルによるアクセス制御

// 権限レベル別UIコンポーネントの表示制御
public class DashboardController
{
    public DashboardView GetDashboard(string userRole)
    {
        return userRole switch
        {
            "admin"     => new AdminDashboard(),
            "manager"   => new ManagerDashboard(),
            "analyst"   => new AnalystDashboard(),
            "viewer"    => new ReadOnlyDashboard(),
            _           => throw new UnauthorizedAccessException(
                               $"不明なロール: {userRole}")
        };
    }
}

switch式を使うことで、「ロールに応じたダッシュボードオブジェクトを返す」という処理が1つのメソッドに収まりました。コードレビューでも「どのロールがどの画面を見るか」が一目瞭然です。

9-3. 請求書の消費税率計算(軽減税率対応)

// 商品カテゴリ別の消費税率計算
public decimal GetTaxRate(ProductCategory category)
{
    return category switch
    {
        ProductCategory.Food          => 0.08m, // 食料品:軽減税率8%
        ProductCategory.Newspaper     => 0.08m, // 新聞:軽減税率8%
        ProductCategory.Alcohol       => 0.10m, // アルコール:標準税率10%
        ProductCategory.Electronics   => 0.10m, // 電子機器:標準税率10%
        ProductCategory.Services      => 0.10m, // サービス:標準税率10%
        _ => throw new ArgumentException(
                 $"税率未設定のカテゴリ: {category}")
    };
}
AI鬼管理山崎 AI鬼管理山崎
この消費税率計算の例は、法改正があったときの変更範囲が明確という利点もあります。switch-caseでまとめておけば「軽減税率の対象が変わった場合はここだけ変更」と一箇所での管理が可能です。
💡 業務ルールの「コード化」にswitch-caseが適している理由

業務ルールは「◯◯のときは◯◯」という対応表の形をしていることが多く、switch-caseの構造と自然にマッピングされます。業務仕様書をそのままコードに落とし込める点で、switch-caseは非エンジニアの仕様レビューにも適した構文です。

Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

10 よくあるエラーと対処法 switch-case実装時にはまりやすいポイントと解決策

C#でswitch-caseを実装するとき、初心者が陥りやすいエラーパターンとその解決策をまとめます。

10-1. コンパイルエラー:制御が次のcaseに流れる

// NG: breakが抜けているとコンパイルエラー
switch (value)
{
    case 1:
        Console.WriteLine("one");
        // ここにbreakがない → コンパイルエラー
    case 2:
        Console.WriteLine("two");
        break;
}

// OK: 同じ処理をまとめたいなら、caseラベルを連続させる
switch (value)
{
    case 1:
    case 2:
        Console.WriteLine("one or two"); // 1でも2でもこの処理が実行される
        break;
}
⚠️ エラーメッセージ「制御は1つの case 句から別の case 句に流れることはできません」

このエラーはbreak文の付け忘れが原因です。一方、caseラベルを連続して書く(caseとcaseの間にコードが1行もない)形は許可されています。

10-2. 文字列のnull参照例外

// NG: string変数がnullの場合、switch-caseでNullReferenceExceptionが発生する可能性
string status = GetStatusFromAPI(); // nullが返ってくるかもしれない

switch (status) // statusがnullだとNullReferenceException
{
    case "active": /* ... */ break;
    default: /* ... */ break;
}

// OK: null チェックを先にする
string status = GetStatusFromAPI() ?? "unknown"; // null合体演算子でデフォルト値

switch (status)
{
    case "active": /* ... */ break;
    default: /* ... */ break;
}

10-3. switch式でdefaultが漏れる

// NG: _(ワイルドカード)がないと、どのケースにもマッチしない場合に例外が発生
string result = status switch
{
    "active"   => "有効",
    "inactive" => "無効",
    // _ がない → "unknown"などのとき MatchFailureException 発生
};

// OK: 必ず _ を追加する
string result = status switch
{
    "active"   => "有効",
    "inactive" => "無効",
    _          => "不明"  // 必須
};
✔️breakの付け忘れ:各caseの末尾にbreakを書く(caseラベルの連続は除く)
✔️文字列のnull対策:null合体演算子??でデフォルト値を先に設定
✔️switch式のワイルドカード_を最後に必ず書く
✔️大文字・小文字の不一致:外部入力はToLower()やToUpper()で統一してから渡す
✔️型の不一致:switch(変数)の変数型とcaseの値の型が一致しているか確認

11 Claude Codeで条件分岐ロジックを自動生成する AIに業務ルールを渡して、switch-caseコードを即座に生成させる

ここまでswitch-caseの技術的な解説をしてきましたが、実はこれらのコードを一行も手書きせずに生成できる方法があります。それがClaude Codeです。

Claude Codeは、Anthropicが開発したAIコーディングアシスタントです。非エンジニアでも、業務ルールを日本語で説明するだけで、対応するC#コードを生成してくれます。

代表菅澤 代表菅澤
私が実際に弊社の業務システムを構築したとき、受注ステータス管理のswitch-case設計はClaude Codeに任せました。「受注ステータスは受付・処理中・発送済・配達済・キャンセルの5段階で、各ステータスで異なる通知を送りたい」と伝えるだけで、安全なC#コードと、errorハンドリングまで含めたコードが出てきました。
AI鬼管理山崎 AI鬼管理山崎
Claude Codeへの指示は日本語で書けます。「C#で月ごとの四半期判定をswitch-caseで書いて」「文字列の注文ステータスでの分岐処理を、nullチェックとdefaultエラーハンドリング付きで実装して」といった形で、業務の文脈をそのまま渡せます。

11-1. Claude Codeへの指示の書き方

Claude Codeに効果的に指示を出すためのコツを紹介します。

1
業務ルールを自然言語で書く「会員ランクが1なら20%割引、2なら10%割引、3なら5%割引、それ以外は割引なし」のように、業務仕様書の表現をそのままコピペしてOK
2
変数名・型を指定する「変数名はmemberLevel、型はintで」「文字列のorderStatusで分岐して」のように型情報を追加するとより正確なコードが生成される
3
安全性要件を添える「nullチェックを含めて」「defaultで例外をスローする設計で」「ログ出力も入れて」と一言添えるだけで防衛的プログラミングが適用される
4
switch式か文かを指定する「C# 8.0のswitch式で書いて」「値を変数に代入したいのでswitch式で」と新旧の構文を指定できる

11-2. Claude Codeが非エンジニアに与える価値

switch-caseに限らず、C#プログラミングにおけるClaude Codeの真の価値は「コードを書く作業をゼロにする」ことではありません。「業務ルールの設計に集中できる」ことです。

従来、システム開発のボトルネックは「業務担当者がルールを決める → エンジニアがコードに翻訳する」という2段階の翻訳プロセスでした。Claude Codeを使えば、業務担当者が自分でコードを生成・確認できるため、このボトルネックが解消します。

✔️仕様変更を即確認:「軽減税率の対象カテゴリが変わった場合のコードを出して」と聞けば5秒でコードが出る
✔️既存コードのリファクタリング:「このif-elseをswitch式で書き直して」でコードの最適化を自動化
✔️テストコードの自動生成:「上記のswitch-caseに対するユニットテストを書いて」で品質担保も効率化
✔️エラー原因の診断:エラーメッセージをそのまま貼り付けると、原因と修正方法を教えてくれる

AI鬼管理では、Claude Codeを中心としたAI活用のプログラムを通じて、エンジニア不在の組織でも業務システムを自走させる支援を行っています。C#のswitch-caseのような技術的な概念も、業務担当者が理解してClaude Codeに適切な指示を出せるようになることが、DX推進の出発点です。

C#でのswitch-case設計からClaude Codeの業務活用まで、御社のAI導入を実践ベースで伴走します。まずは無料相談で、現在の課題をお聞かせください。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

よくある質問

Q. C#のswitch-caseはどんなデータ型で使えますか?

A. C#のswitch-caseは、整数型(int、long等)、文字列型(string)、列挙型(enum)、char型で使えます。C# 7.0以降ではパターンマッチングが強化され、型パターン(is演算子相当)や条件パターン(whenキーワード)も使えるようになりました。bool型はswitch-caseではなくif-elseが自然です。

Q. switch-caseとif-elseはどちらが速いですか?

A. コンパイラがswitch-caseをジャンプテーブルに最適化できる場合、理論的にはswitch-caseが有利です。ただし、現代のコンパイラは高度な最適化を行うため、選択肢が十数個以下では実用上の差はほぼありません。可読性・保守性を優先して選ぶことを推奨します。

Q. C#でフォールスルー(fall-through)は使えますか?

A. C#は基本的にフォールスルーを禁止しており、breakのないcaseブロックはコンパイルエラーになります。ただし、caseとcaseのラベル間にコードが1行もない場合(複数caseラベルの連続)は許可されています。「case 1: case 2: 処理; break;」のように書けます。

Q. switch式(switch expression)とswitch文の使い分けは?

A. switch式(C# 8.0以降)は「値を返す」ために使います。変数への代入やメソッドの戻り値として直接使えるのが特徴です。一方、複数のメソッド呼び出しや複雑な処理を実行したい場合は、従来のswitch文が適しています。「値のマッピング・変換はswitch式、手続き処理はswitch文」と使い分けましょう。

Q. Claude Codeで生成したswitch-caseコードは実際に使えますか?

A. はい、使えます。Claude Codeはコンテキスト(プロジェクトのファイル構造やコードスタイル)を理解した上でコードを生成します。ただし、生成されたコードをそのまま使う前に、業務ロジックが正しく反映されているかのレビューは必ず人間が行うことを推奨します。特に金融系・医療系の重要業務ロジックは要注意です。

Q. switch-caseのcaseに変数は使えますか?

A. C#の従来のswitch-case文では、caseに書けるのは定数値のみで、変数は使えません。「case someVariable:」はコンパイルエラーになります。C# 9.0以降のswitch式やwhenキーワードを使えば、変数を使った条件も書けるようになります。変数との比較が必要な場合はif-else文を使うか、C# 9.0以降の新構文を検討してください。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月18日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。