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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。