switch 表达式与模式
switch 表达式(=> 语法)、属性模式、元组模式、位置模式
switch 表达式与模式
C# 的 switch 远不止整数匹配——可以匹配类型、属性、元组,取代大量 if-else 链。
学完本章你将: 掌握 switch 表达式、属性模式、元组模式、位置模式。
属性模式
csharp
record Person(string Name, int Age, string City);
string Describe(Person p) => p switch
{
{ Age: < 18 } => "未成年",
{ Age: >= 60 } => "老年",
{ City: "北京" or "上海" } => $"来自一线城市:{p.Name}",
{ Name: var name, Age: var age } => $"{name},{age}岁",
};
元组模式
csharp
// 用元组同时匹配多个值
string RockPaperScissors(string me, string opponent)
=> (me, opponent) switch
{
("石头", "剪刀") or ("剪刀", "布") or ("布", "石头") => "你赢了!",
(var a, var b) when a == b => "平手",
_ => "你输了",
};
列表模式(C# 11+)
csharp
int Sum(int[] nums) => nums switch
{
[] => 0, // 空数组
[var x] => x, // 单元素
[var x, var y] => x + y, // 两个元素
[var first, .. var middle, var last] => first + last + Sum(middle),
};
switch 中的 when 守卫
csharp
string Classify(int n) => n switch
{
< 0 => "负数",
0 => "零",
> 0 and <= 10 => "小",
> 10 when n % 2 == 0 => "大的偶数",
> 10 => "大的奇数",
};