C# switch 文をマスターする:構文、例、ベストプラクティス
C# switch 文
複雑な if-else チェーンを、クリーンで読みやすい C# の switch 文に置き換える方法を、実践的な例とともに学習します。
switch 文は、単一の式を評価し、一致する case ブロックを実行することで意思決定を簡素化します。長い if-else 階段と比較して、switch 構文はより簡潔で保守しやすくなります。
基本構造は以下の通りです:
switch (variableOrExpression) {
case value1:
// value1 のコード
break;
case value2:
// value2 のコード
break;
// …
default:
// いずれの case も一致しないときのコード
}
式が case と一致すると、対応するブロックが break に達するまで実行され、switch を終了します。一致する case がない場合は default ブロックが実行され、else 節を模倣します。
break がないと、実行が後続の case に「フォールスルー」し、しばしばバグの原因となります。C# break 文 の詳細については公式ドキュメントを参照してください。
例 1:母音の判定
using System;
namespace Conditional {
class SwitchCase {
public static void Main(string[] args) {
char ch;
Console.WriteLine("Enter an alphabet");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch)) {
case 'a':
Console.WriteLine("Vowel");
break;
case 'e':
Console.WriteLine("Vowel");
break;
case 'i':
Console.WriteLine("Vowel");
break;
case 'o':
Console.WriteLine("Vowel");
break;
case 'u':
Console.WriteLine("Vowel");
break;
default:
Console.WriteLine("Not a vowel");
break;
}
}
}
}
実行結果:
Enter an alphabet X Not a vowel
ユーザー入力が小文字に変換され、母音の case と照合されます。母音に一致しない場合はデフォルトメッセージが表示されます。
すべての母音 case が同じアクションを実行するため、グループ化できます:
例 2:グループ化された case
using System;
namespace Conditional {
class SwitchCase {
public static void Main(string[] args) {
char ch;
Console.WriteLine("Enter an alphabet");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch)) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
Console.WriteLine("Vowel");
break;
default:
Console.WriteLine("Not a vowel");
break;
}
}
}
}
出力は同一ですが、コードがよりクリーンになります。
switch 文は特定のデータ型に限定されます:
- プリミティブ型 (bool、char、整数型)
- 列挙型 (enum)
- String
- 上記の Nullable 版
例 3:シンプルな電卓
using System;
namespace Conditional {
class SwitchCase {
public static void Main(string[] args) {
char op;
double first, second, result;
Console.Write("Enter first number: ");
first = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter second number: ");
second = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter operator (+, -, *, /): ");
op = (char)Console.Read();
switch(op) {
case '+':
result = first + second;
Console.WriteLine("{0} + {1} = {2}", first, second, result);
break;
case '-':
result = first - second;
Console.WriteLine("{0} - {1} = {2}", first, second, result);
break;
case '*':
result = first * second;
Console.WriteLine("{0} * {1} = {2}", first, second, result);
break;
case '/':
result = first / second;
Console.WriteLine("{0} / {1} = {2}", first, second, result);
break;
default:
Console.WriteLine("Invalid Operator");
break;
}
}
}
}
実行例:
Enter first number: -13.11 Enter second number: 2.41 Enter operator (+, -, *, /): * -13.11 * 2.41 = -31.5951
この電卓は 2 つのオペランドと演算子を受け取り、switch を使用して要求された操作を実行します。入力は ReadLine() と Read() で読み取ります。入出力の詳細については C# 基本入出力 を参照してください。
if-else チェーンで置き換えることも可能ですが、離散的な値に対しては switch の方が意図が明確で実行も高速です。
C言語