在C#里,switch case是用来做多分支判断的常用语句。传统写法适合根据一个变量的固定值走不同逻辑,而新语法借助模式匹配和switch表达式让代码更短也更灵活。下面先说明两种写法分别怎么用,再给出可运行示例。

一、传统switch case用法
传统switch以一个表达式作为判断源,每个case后面跟常量,匹配成功后执行代码,通常要用break结束分支,否则会继续往下走(贯穿)。
基本结构
using System;
class Program
{
static void Main()
{
int day = 3;
switch (day)
{
case 1:
Console.WriteLine("周一");
break;
case 2:
Console.WriteLine("周二");
break;
case 3:
Console.WriteLine("周三");
break;
default:
Console.WriteLine("其他");
break;
}
}
}
注意,如果case里没有break或return,编译器会报错,这是C#和传统C语言不同的地方,不允许隐式贯穿。
使用when做条件判断(C# 7起)
传统switch也能配合when在case上附加条件,这已经属于新语法的一部分。
using System;
class Program
{
static void Main()
{
object val = 12;
switch (val)
{
case int i when i > 10:
Console.WriteLine("大于10的整数: " + i);
break;
case int i:
Console.WriteLine("其他整数: " + i);
break;
default:
Console.WriteLine("非整数");
break;
}
}
}
二、C#新语法:switch表达式
C# 8引入了switch表达式,用更紧凑的方式返回结果,不再需要写case和break,用=>映射每个分支,最后用_表示弃元(默认)。
switch表达式示例
using System;
class Program
{
static void Main()
{
int day = 3;
string name = day switch
{
1 => "周一",
2 => "周二",
3 => "周三",
_ => "其他"
};
Console.WriteLine(name);
}
}
结合类型模式与属性模式
新语法可以针对类型直接匹配,并读取对象属性,非常适合处理多种输入来源。
using System;
class User
{
public int Age { get; set; }
}
class Program
{
static string Check(object input) => input switch
{
User u when u.Age >= 18 => "成年",
User u => "未成年",
int n when n >= 18 => "数字成年",
_ => "未知"
};
static void Main()
{
Console.WriteLine(Check(new User { Age = 20 }));
Console.WriteLine(Check(15));
}
}
三、传统用法与新语法对比
| 对比项 | 传统switch case | switch表达式 |
|---|---|---|
| 语法长度 | 较长,需case和break | 短,用=>映射 |
| 返回值 | 靠外部变量或return | 本身就是一个表达式值 |
| 适用场景 | 需要执行多行复杂逻辑 | 简单映射或条件返回 |
四、使用建议
如果你的分支只是返回一个计算结果,优先用switch表达式,代码更清晰。如果每个分支要做很多操作、调用多个方法,传统switch case更好维护。写判断时注意case顺序,带when的条件要放在更具体的分支前面,避免被后面的_或宽泛case吃掉。
C#switch_casepattern_matching修改时间:2026-07-26 14:42:32