【C#】 switchの使い方を初心者向けにわかりやすく解説

※ この記事にはアフィリエイトリンクが含まれます

C#のswitch文やswitch式の使い方で悩んでいませんか?

プログラムの分岐が増えてコードが読みにくくなった、
どこからswitch式に切り替えればよいかわからない、
caseの扱いで意図しない動作になってしまうといった悩みはよくあります。

  • breakの扱いで詰まる
  • switch文とswitch式の違いがわからない
  • パターンマッチやwhenガードの使い方に戸惑う

結論から言うと、C#のswitchは基本を押さえれば安全で読みやすい分岐を作れます。

基本的なswitch文を覚え、その後にswitch式やパターンマッチを導入すると効果的です。

具体的には以下の順で学ぶとよいでしょう。

・基本のswitch文の書き方を理解する

・switch式で簡潔に書く方法を学ぶ

・パターンマッチとwhen節で柔軟に処理する

この記事では、初心者向けにC# switchの使い方を、
サンプルコードとともにわかりやすく解説します。

読み終えると、よくある間違いを避けつつ実務で使えるスイッチ文が書けるようになります。

目次

switchとは何か

まずはC#におけるswitchの役割を整理します。

switchは複数の条件分岐を整理して書くための構文です。

if-elseを長く並べる代わりに、
値ごとの処理をcaseで分けて読みやすくできます。

基本的なswitch文の書き方

ここでは従来のswitch文の基本を学びます。

最初にbreakやdefaultの意味を押さえましょう。

基本構文(例)

int value = 2;
switch (value)
{
    case 1:
        Console.WriteLine("1です");
        break;
    case 2:
        Console.WriteLine("2です");
        break;
    default:
        Console.WriteLine("その他です");
        break;
}

上の例ではvalueの値によって実行する処理を分けています。

caseの後にbreakを書かないとコンパイルエラーになる場面が多いです。

C#では基本的にcase間のフォールスルーは許されていません。

意図的に同じ処理を使う場合は複数のcaseをまとめて書きます。

複数caseのまとめ方

switch (value)
{
    case 1:
    case 2:
        Console.WriteLine("1か2です");
        break;
    default:
        Console.WriteLine("その他です");
        break;
}

上のようにcaseを連続させると、
1と2の両方で同じ処理が実行されます。

この書き方は可読性が高くよく使います。

switch式(C# 8.0以降)の使い方

C# 8.0から導入されたswitch式は、式として値を返す点が特徴です。

より簡潔に書けて副作用の少ないコードになります。

基本的なswitch式の例

int value = 2;
string result = value switch
{
    1 => "1です",
    2 => "2です",
    _ => "その他です"
};
Console.WriteLine(result);

式として値を返すため、代入やreturnと相性が良いです。

アロー(=>)で対応関係を表すので視認性が高くなります。

パターンマッチと組み合わせる

object obj = "hello";
string text = obj switch
{
    int i => $"int:{i}",
    string s => $"string:{s}",
    null => "nullです",
    _ => "その他"
};

上のように型パターンを使うと、
値の型に応じた処理を簡潔に書けます。

switch式はパターンマッチと相性が良く表現力が高いです。

よく使う実践パターン

ここでは実務でよく出てくるパターンを紹介します。

enumや文字列、オブジェクトのパターンなどです。

列挙型(enum)との組み合わせ

enum Status { New, InProgress, Done }

Status s = Status.InProgress;
string msg = s switch
{
    Status.New => "新規",
    Status.InProgress => "処理中",
    Status.Done => "完了",
    _ => "不明"
};

enumswitchとの相性が良く、
caseを網羅することで安全な設計ができます。

未処理のケースがあるときはdefault_を使いましょう。

文字列のケース分け

string cmd = "start";

switch (cmd)
{
    case "start":
        Start();
        break;
    case "stop":
        Stop();
        break;
    default:
        Console.WriteLine("コマンドが不明です");
        break;
}

文字列比較は大文字小文字の違いに注意が必要です。

必要に応じてStringComparerToLowerで正規化して比較します。

よくある間違いと対処法

初心者が陥りがちなミスとその対処法をまとめます。

よくあるパターンを事前に知るとミスを減らせます。

  • breakを書き忘れて意図しない挙動になる(→caseのまとめ書きを使う)
  • 文字列比較の大文字小文字を見落とす(→正規化や比較方法を統一する)
  • switchのネストが深くなり可読性が下がる(→メソッドに切り出す)

特にswitch文で複雑な処理を直接書きすぎると、
テストや保守が困難になります。

処理は適切に分割して責務を明確にしましょう。

実践的なサンプル集

実際のコード例をいくつか示します。

用途に応じてswitch文とswitch式を使い分けてください。

コマンド処理の例

void Execute(string cmd)
{
    switch (cmd?.ToLower())
    {
        case "start":
            Start();
            break;
        case "stop":
            Stop();
            break;
        default:
            Console.WriteLine("不明なコマンドです");
            break;
    }
}

// switch式で同じ処理を返す例
string Describe(string cmd) => (cmd?.ToLower()) switch
{
    "start" => "開始",
    "stop" => "停止",
    _ => "不明"
};

nullチェックや小文字化などの前処理を入れると安定します。

switch式は戻り値がある処理で特に便利です。

まとめと次のステップ

この記事ではC#のswitchの基本から応用、
よくあるミスまでを解説しました。

結論として、まずは基本のswitch文を理解し、必要に応じてswitch式やパターンマッチを導入してください。

学んだことをまとめると次の通りです。

・switch文は複数分岐を整理するために使う。

・switch式は短く値を返す場面で有効。

・パターンマッチやwhenで柔軟な条件を表現できる。

次のステップとしては、自分のプロジェクトで小さな箇所からswitch式を試し、
enumやパターンマッチを使ってリファクタリングしてみてください。

これによりコードの可読性と安全性が向上します。

最後に、この記事がC# switch 使い方を学ぶ助けになれば幸いです。

疑問点があれば具体的なコードを示して質問してください。

#エンジニアとして、もっと自分の力を活かしたいあなたへ

「このまま今の職場にいて、成長できるんだろうか?」

C#を使っている方なら、一度はそう感じたことがあるかもしれません。

実は今、C#/.NETエンジニアの市場価値は高まっており
年収アップ・フルリモート・自社開発企業など、選べる選択肢は確実に増えています。

もし今後、C#を活かして働きたい、あるいは開発現場で経験を積みたいとお考えなら…
自分に合った転職サービスを早めに知っておくことが大きな武器になります。

現役エンジニアからのサポート付き・無料で学べるスクール・社内SE特化の求人など、
転職支援サービスを厳選したまとめ記事をこちらで紹介しています。

ここまで読んでいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

沖縄出身のエンジニアです。IT業界で5年以上の経験があり、主にC#やPHPを使って開発を行ってきました。新しい技術にも興味があり、日々学びながらスキルアップを目指しています。

コメント

コメントする

CAPTCHA


目次