基本 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
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com