【2026年7月最新】C# switch-case文完全ガイド|数値・文字列条件分岐・switch式・実務活用まで徹底解説
この記事の内容
- 01switch-case文とは何か――条件分岐の基礎と業務フローへの対応
- 02基本構文と最もシンプルなswitch-caseの書き方
- 03数値での条件分岐――スコア・等級・ランク判定の実例
- 04文字列での条件分岐――コマンド・ステータス・業種別処理
- 05複数条件を1つのcaseにまとめる方法
- 06defaultケースの重要性と安全な設計
- 07C# 8.0以降のswitch式(switch expression)
- 08switch vs if-else の使い分け判断基準
- 09業務システムへの実践適用例
- 10よくあるエラーと対処法
- 11Claude Codeで条件分岐ロジックを自動生成する
- FAQよくある質問
「C#でプログラムを書いているが、条件分岐の書き方が複数あって、どれをいつ使えばいいか分からない」——そんな疑問を抱えている方は多いはずです。
C#開発において、条件分岐の実装方法は、コードの読みやすさ・保守しやすさに直結します。中でもswitch-case文は、複数の選択肢から1つを選ぶ処理に特化した構文です。if-elseを何重にも重ねるより、はるかにスッキリ書けます。さらにC# 8.0以降では、switch式(switch expression)という新しい書き方も登場し、より簡潔なコードが実現できるようになりました。
この記事では、C#のswitch-case文を基本構文から実務パターンまで、非エンジニアの経営者・マネージャーにも理解できるように解説します。業務システムの設計担当者や、エンジニアチームにコードレビューを行う立場の方にも役立つ内容です。
この記事を最後まで読むと、以下のことが明確になります。
01 WHAT IS SWITCH-CASE 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と比べて条件が一列に並ぶため、視覚的に「どの値のときどの処理か」がひと目でわかります。
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 BASIC SYNTAX 基本構文と最もシンプルな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文を構成する各要素の役割を整理します。
2-2. switch-caseの処理フロー
switch-case文が実行されると、以下の流れで処理が進みます。
C#はフォールスルーを許可していないため、breakを書き忘れるとコンパイルエラー「制御は1つのcase句から別のcase句に流れることはできません」が発生します。エラーメッセージが出たら、まずbreakの付け忘れを確認してください。
03 NUMERIC SWITCH 数値での条件分岐――スコア・等級・ランク判定の実例 整数値を使った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;
}
📚 用語解説
enum(列挙型):複数の定数をまとめて名前をつけたデータ型。DayOfWeek(曜日)、OrderStatus(注文ステータス)など、決まった選択肢がある場面で使います。switch-caseとの組み合わせで、「選択肢の漏れ」をコンパイラが検出できるようになります。
enumをswitch-caseで使う最大の利点は、IDEが「未処理のenumケースがある」と警告を出してくれることです。OrderStatusに新しいステータスを追加したとき、switch文で処理が漏れているとIDEやClaude Codeが教えてくれます。これはシステムの安全性を大きく高めます。
04 STRING SWITCH 文字列での条件分岐――コマンド・ステータス・業種別処理 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が活躍する代表的なシーンを紹介します。
📚 用語解説
case-sensitive(ケースセンシティブ):文字の大文字と小文字を区別すること。C#の文字列比較はデフォルトでcase-sensitiveです。"Apple"と"apple"は異なる文字列として扱われます。switch-caseで外部入力を扱う際は、この性質を常に意識する必要があります。
05 MULTIPLE CASES 複数条件を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#で許可される唯一のフォールスルーパターンです。
複数条件をまとめる場合、似たグループはまとめて書き、グループ間には空行を入れると読みやすくなります。「クレジット系」「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}");
06 DEFAULT CASE 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を書き、ログ出力か例外スローで問題を可視化しましょう。
6-1. defaultの配置位置について
C#ではdefaultケースはswitch文の末尾に書くのが一般的ですが、構文上は中間や先頭にも置けます。ただし可読性の観点から、末尾推奨です。また、defaultは必ず1つだけ書けます(2つ書くとコンパイルエラー)。
①軽微な場合はログを残してデフォルト動作(通常料金を適用など)、②重大な場合は例外をスロー、③テスト環境では Console.Writelineでデバッグ情報出力——この3パターンを状況に応じて使い分けましょう。
07 SWITCH EXPRESSION 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 { ... }の形式=>で結果を指定,(カンマ)で区切る_がすべてのケースにマッチ(ワイルドカードパターン)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評価:良好
>=のような関係演算子もパターンとして直接書けるようになっています。これにより、「範囲で分岐したいけどswitch-caseが使えない」という制限がほぼ解消されました。switch式は「ある値から別の値を導出する」(値の変換・マッピング)に最適です。複数の処理を実行する(メソッドを呼ぶ、ログを書く、状態を変える)ケースでは、旧来のswitch文のほうがコードの意図が明確です。「変換はswitch式、手続きはswitch文」と覚えておくと良いでしょう。
08 SWITCH VS IF-ELSE switch vs if-else の使い分け判断基準 状況に応じて最適な条件分岐構文を選ぶ
「switch-caseかif-elseか」という選択は、C#開発者が日常的に直面する判断です。それぞれの特性を理解して、適切に使い分けましょう。
8-1. switchを選ぶべきケース
以下のすべてに当てはまる場合、switch-caseが適しています。
8-2. if-elseを選ぶべきケース
以下のいずれかに当てはまる場合、if-elseが適しています。
x > 100やname != nullのような範囲・論理条件が必要if (a > 0 && b != null)等)| 判断基準 | switch-caseを選ぶ | if-elseを選ぶ |
|---|---|---|
| 比較の種類 | 値の一致比較のみ | 範囲・論理式・複合条件 |
| 比較変数の数 | 1変数 | 複数変数を組み合わせ可 |
| 選択肢の数 | 4つ以上 | 3つ以下 |
| コードの意図 | 「この変数が◯◯の値ならば」 | 「この条件が満たされるならば」 |
| 保守性 | 選択肢の追加がしやすい | 条件が増えるとネストが深くなる |
09 PRACTICAL USAGE 業務システムへの実践適用例 受注・在庫・権限管理など実務コードでの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}")
};
}
業務ルールは「◯◯のときは◯◯」という対応表の形をしていることが多く、switch-caseの構造と自然にマッピングされます。業務仕様書をそのままコードに落とし込める点で、switch-caseは非エンジニアの仕様レビューにも適した構文です。
10 ERRORS & FIXES よくあるエラーと対処法 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;
}
このエラーは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" => "無効",
_ => "不明" // 必須
};
??でデフォルト値を先に設定_を最後に必ず書く11 CLAUDE CODE AUTOMATION Claude Codeで条件分岐ロジックを自動生成する AIに業務ルールを渡して、switch-caseコードを即座に生成させる
ここまでswitch-caseの技術的な解説をしてきましたが、実はこれらのコードを一行も手書きせずに生成できる方法があります。それがClaude Codeです。
Claude Codeは、Anthropicが開発したAIコーディングアシスタントです。非エンジニアでも、業務ルールを日本語で説明するだけで、対応するC#コードを生成してくれます。
11-1. Claude Codeへの指示の書き方
Claude Codeに効果的に指示を出すためのコツを紹介します。
11-2. Claude Codeが非エンジニアに与える価値
switch-caseに限らず、C#プログラミングにおけるClaude Codeの真の価値は「コードを書く作業をゼロにする」ことではありません。「業務ルールの設計に集中できる」ことです。
従来、システム開発のボトルネックは「業務担当者がルールを決める → エンジニアがコードに翻訳する」という2段階の翻訳プロセスでした。Claude Codeを使えば、業務担当者が自分でコードを生成・確認できるため、このボトルネックが解消します。
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以降の新構文を検討してください。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




