C# switch 基礎和進階使用方式示範

基本 switch 語法示範

基本規則:
  • 都不符合才會進入到 default ,不論 default 是不是放在最後一個
  • 除非遇到 break ,不然會繼續比對下一個條件(return, throw 等也會直接離開 switch 區塊)
    
int data = 6;

switch (data)
{
    case < 5:
        Console.WriteLine("小於5");
        break;
    case 5:
        Console.WriteLine("等於5");
        break;
    case 6:
    case 7:
        Console.WriteLine("等於6或7");
        break;
    case >= 8 and <= 10: // 需要 C# 9.0
        Console.WriteLine("介於8~10之間");
        break;
    default:
        Console.WriteLine("其他");
        break;
}
    

上述的輸出結果為「等於6或7」
not, and, or 這樣的方式叫做「邏輯模式」,需要注意的是「邏輯模式」需要 C# 9.0 或以上才可以這樣使用,從 .NET 5 開始才是預設使用 C# 9.0。

確認資料型態

switch 除了用來比對內容外,還可以用來確認資料型態:
    
object data = "6";

switch (data)
{
    case int i:
        Console.WriteLine($"int: {i}");
        break;
    case string s:
        Console.WriteLine($"string: {s}");
        break;
    default:
        Console.WriteLine($"其他 {data}");
        break;
}
    

在各區塊中可以使用各自的變數名稱使用,上面範例的輸出結果為「string: 6」

switch 運算式

在 C# 8.0 中增加了「模式比對增強功能」,其中就包含了 switch 運算式,讓 switch 能夠使用簡潔的語法回傳一個值,或是拋出例外。
    
int data = 5;

string str = data switch
{
    1 => "一",
    2 => "二",
    > 2 and <=5 => "大於2且小於等於5",
    6 or 7 => "6或是7",
    > 7  => "大於7",
    _ => throw new ArgumentException("不合法的參數")
};
Console.WriteLine(str); // 大於2且小於等於5
    

在 .NET Framework 中預設 C# 版本是 C# 7.3 ,.NET Standard 2.1 和 .NET Core 3.x 預設的 C# 版本才是 C# 8.0

參考資料:
Microsoft.Learn - C# language versioning
Microsoft.Learn - The history of C#
Microsoft.Learn - Selection statements - if, if-else, and switch
Microsoft.Learn - switch expression - pattern matching expressions using the switch keyword

留言