【C#】switch文で「string の定数値が必要です」エラーが出る原因と解決策を徹底解説

C#で switch-case を使って文字列の分岐処理を書いていたところ、
突然「string の定数値が必要です」というエラーに遭遇した――。

case に変数を指定しているだけなのに、なぜ怒られるのか?
そもそも “定数値” とは何を指しているのか?
Visual Studio で頻出するエラーですが、仕組みを理解していないと意外とハマります。

実はこのエラー、C# における switch文の仕様が原因 です。
この記事では、再現コードから原因の解説、そして具体的な解決策まで分かりやすくまとめました。

  • どうして「定数じゃないとダメ」なのか
  • const を使った正しい書き方
  • 変数を使いたい場合の代替案

これらを理解すれば、今後同じエラーに悩まされることはありません。
ぜひ、あなたの開発に役立ててください。

目次

エラーが発生するコード例

まずは、実際に「stringの定数値が必要です」エラーが出るサンプルを見てみましょう。

string input = Console.ReadLine();

string key = "A";

switch (input)
{
    case key:  // ← ここでコンパイルエラー
        Console.WriteLine("Aです");
        break;
    default:
        Console.WriteLine("その他");
        break;
}

Visual Studioでは次のようなエラーメッセージが表示されます。

CS0150: 定数値が必要です

一見正しく書けているように見えるのに、case key: で止められてしまう――
ここが多くの人がつまずくポイントです。

なぜエラーになるのか?原因を理解する

ポイントは、switch-case 文における case ラベルのルール にあります。
C#では、case の右側に指定できるのは、次のどちらかです。

  • コンパイル時に確定している値(コンパイル時定数)
  • 定数式

つまり、C# のコンパイラが「この値は絶対に変わらない」と判断できる場合に限り、case に使えるという仕組みです。変数はNGということになります。

変数はなぜNGなのか?

string key = "A";

この変数は実行時にメモリ上に確保されるため、
コンパイル時点では値が決まっていません。

結果として、string の定数値が必要です というエラーが出ます。

定数がOKな理由

const string KEY = "A";

const で宣言された変数は、
コンパイル時に値が埋め込まれる(リテラル扱い) ため、case に使用可能です。

つまり、コンパイラにとっては次のコードと同等です。

case "A":

正しい書き方

case に変数を指定したい場合、状況に応じて次の方法が取れます。

解決策1:constを使う

case で固定値を使うなら、const を付けるだけで解決します。

string input = Console.ReadLine();

const string KEY = "A";

switch (input)
{
    case KEY:
        Console.WriteLine("Aです");
        break;
    default:
        Console.WriteLine("その他");
        break;
}
  • 値が変わらないと確定している場合に有効
  • const はコンパイル時に埋め込まれるため case に使用可能

解決策2:if-elseに置き換える

値が変わる可能性があるなら、switch にこだわらない選択もアリ。

string input = Console.ReadLine();
string key = "A";

if (input == key)
{
    Console.WriteLine("Aです");
}
else
{
    Console.WriteLine("その他");
}

まとめ

switch-case で「string の定数値が必要です」というエラーが出るのは、
case に指定できるのがコンパイル時定数だけという C# の仕様が原因です。

状況別の解決策は以下の通り。

  • 値が固定 → const を使う
  • 動的な比較 → if-else

つまり、「case に変数を使えない」のではなく、
用途に応じて適切な分岐方法を選ぶ必要があるということです。

この仕組みを理解しておけば、今後同じエラーで迷うことはありません。
ぜひ日々の開発に役立ててください!

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

この記事を書いた人

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

コメント

コメントする

CAPTCHA


目次