Z
ZHANK
编程在线教程C# 教程switch 表达式与模式
控制流程

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 => "大的奇数",
};