Code Fix

初級

switch文のフォールスルー禁止エラーの原因と直し方

C#のswitch文はCやJavaと違い、暗黙のフォールスルーを認めません。各caseの終わり方に明示的な文が必要です。

エラーメッセージの読み方

Program.cs(5,13): error CS0163: Control cannot fall through from one case label ('case 1:') to another
Program.cs
ファイル名
5
行番号
13
列番号 — この位置でコンパイラが解析に失敗しました
CS0163
エラーコード — 検索するとMicrosoftの解説ページが見つかります
Control cannot fall through from one case label ('case 1:') to another
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  class Program {
 2      static void Main(string[] args) {
 3          int n = 1;
 4          switch (n) {
 5              case 1:
 6                  System.Console.WriteLine("one");
 7                       
                    ^
 8              case 2:
 9                  System.Console.WriteLine("two");
10                  break;
11          }
12      }
13  }
Program.cs(5,13): error CS0163: Control cannot fall through from one case label ('case 1:') to another

C#はCやJavaと違い、暗黙のフォールスルーを認めません。各caseは明示的にbreak(またはreturn等)で終える必要があります。

直し方: (空)break; にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  class Program {
 2      static void Main(string[] args) {
 3          string color = "red";
 4          switch (color) {
 5              case "red":
 6                  System.Console.WriteLine("stop");
 7                               
                        ^
 8              case "green":
 9                  System.Console.WriteLine("go");
10                  break;
11          }
12      }
13  }
Program.cs(5,13): error CS0163: Control cannot fall through from one case label ('case "red":') to another

文字列のswitchでも規則は同じです。空のcaseにもbreakが必要です。

直し方: (空)break; にします。

この問題を解いてみる →

パターン3

 1  class Program {
 2      static void Main(string[] args) {
 3          int score = 2;
 4          switch (score) {
 5              case 1:
 6                  System.Console.WriteLine("low");
 7                  break;
 8              case 2:
 9                  System.Console.WriteLine("mid");
10                       
                    ^
11              case 3:
12                  System.Console.WriteLine("high");
13                  break;
14          }
15      }
16  }
Program.cs(8,13): error CS0163: Control cannot fall through from one case label ('case 2:') to another

2番目のcaseにもbreakが要ります。どのcaseも独立して終える必要があります。

直し方: (空)break; にします。

この問題を解いてみる →

よくある誤解

CやJavaと違い、C#のswitch文は前のcaseの処理が次のcaseに流れ落ちることを許しません。空のcaseにもbreakなどの脱出文が必要です。

まとめ

switch文のフォールスルー禁止エラーの原因と直し方は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)