C# Programming

C# switch文における文字列比較の極意

Spread the love

目次

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式は多くの場合、より明確なコードにつながります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です