目次
switch文の理解
switch
文は、式の値に基づいて実行するコードブロックを選択するための構造化された方法を提供します。複数の値を扱う場合、冗長なif-else if
チェーンよりも効率的な代替手段です。基本的な構文は次のとおりです。
switch (expression)
{
case value1:
// expression == value1の場合に実行するコード
break;
case value2:
// expression == value2の場合に実行するコード
break;
default:
// どのケースにも一致しない場合に実行するコード
break;
}
break
文は不可欠です。これがないと、現在のケースが一致した場合でも、次のケースに実行が継続される「フォールスルー」が発生します。
C# switch文での文字列の使用
C# 8以前は、switch
文で文字列を使用するには、面倒な回避策が必要でした。C# 8ではパターンマッチングが導入され、switch
文内で直接文字列の比較が可能になり、コードの可読性と保守性が大幅に向上しました。
string day = "Monday";
switch (day)
{
case "Monday":
Console.WriteLine("今週の始まり!");
break;
case "Tuesday":
case "Wednesday":
case "Thursday":
Console.WriteLine("今週の半ば!");
break;
case "Friday":
Console.WriteLine("週末はもうすぐ!");
break;
case "Saturday":
case "Sunday":
Console.WriteLine("週末です!");
break;
default:
Console.WriteLine("無効な曜日が入力されました。");
break;
}
この例では、さまざまな文字列値を効率的に処理する方法を示しています。ネストされたif
文を使用せずに複数のケースをグループ化できることに注目してください。
大文字と小文字の区別
C#のswitch
文での文字列比較は大文字と小文字を区別します。大文字と小文字を区別しない比較を行うには、比較の前に文字列を小文字(または大文字)に変換します。
string day = "monday";
switch (day.ToLower())
{
case "monday":
Console.WriteLine("今週の始まり!");
break;
// ... その他のケース ...
}
可読性を向上させるswitch式
C# 8ではswitch式も導入され、よりコンパクトな構文が提供されています。前の例は次のようになります。
string day = "Monday";
string message = day switch
{
"Monday" => "今週の始まり!",
"Tuesday", "Wednesday", "Thursday" => "今週の半ば!",
"Friday" => "週末はもうすぐ!",
"Saturday", "Sunday" => "週末です!",
_ => "無効な曜日が入力されました。"
};
Console.WriteLine(message);
switch式は、特に多くのケースがある場合、その簡潔さと可読性の向上から一般的に好まれています。
結論
C# 8のパターンマッチングにより、switch
文での文字列の使用が簡素化され、古いif-else if
アプローチよりもコードの可読性と保守性が向上します。大文字と小文字の区別を忘れず、よりエレガントなコードのためにswitch式を使用することを検討してください。
よくある質問
- Q: switch文の文字列の長さ制限はありますか? A: いいえ、固有の制限はありません。非常に長い文字列はパフォーマンスにわずかな影響を与える可能性がありますが、通常は無視できます。
- Q:
break
文を省略するとどうなりますか? A: フォールスルーが発生し、実行が次のケースに継続され、予期しない動作が発生する可能性があります。常にbreak
文を含めるか(またはswitch式を使用してください)。 - Q: switch式は常に高速ですか? A: パフォーマンスの違いは通常無視できます。可読性と保守性を優先してください。switch式は多くの場合、より明確なコードにつながります。