模式匹配是C#中高效处理不确定数据的核心工具,能一体化完成类型检查、变量绑定和值判断,显著减少if-else、类型转换和null检查。

模式匹配不是语法糖,它是 C# 里真正能帮你「少写 if-else、少做类型转换、少判 null」的生产力工具。用对了,代码更短、分支更清晰、错误更早暴露。
替代冗长的类型判断和强制转换
传统写法要先 is 判断类型,再用 as 转换,最后还要判空——三步才能安全取值。模式匹配一步到位:
if (obj is string s && s.Length > 0)
{
Console.WriteLine($"非空字符串: {s}");
}
// ✅ 类型检查 + 变量绑定 + 值判断,全在一行完成- 不用
as string再判s != null,is string s已隐含非 null 绑定 - 如果只想要类型判断(不绑定变量),直接写
obj is string即可 - 若类型不匹配,
s变量根本不会声明,编译器报错提示清晰
让 switch 表达式真正“表达逻辑”,而不是堆 case
C# 的 switch 表达式配合模式匹配,能天然处理数值范围、多类型混合、属性约束等场景,不再需要一堆 if (x >= 18 && x 。
string category = age switch
{
< 13 => "儿童",
>= 13 and < 18 => "青少年",
>= 18 and < 65 => "成人",
_ => "老年人"
};是关系模式,and是逻辑模式,_是弃元模式——全部原生支持,无需额外方法- 返回值类型由所有分支统一推导,避免
switch语句中漏写return或类型不一致的问题 - 编译器会检查是否穷尽(尤其对
enum或密封类型),漏写_直接报错
安全解构 record 和自定义类型,跳过 null 检查陷阱
对 record 或带 Deconstruct 方法的类,可用属性模式或位置模式直接提取字段,且自动跳过 null 引用异常:
if (point is Point { X: var x, Y: var y } && x > 0 && y > 0)
{
Console.WriteLine($"第一象限点: ({x}, {y})");
}-
Point { X: var x, Y: var y }是属性模式:只匹配有这两个可读属性的对象,且x/y自动绑定 - 如果
point是null,整个is表达式直接为false,不会抛NullReferenceException - 不用手动写
point?.X ?? 0这类防御式代码,逻辑更贴近意图
最常被忽略的一点:模式匹配不是“炫技功能”,它和可空引用(string?)、记录类型(record)、switch 表达式是协同演进的。单独用某一个,效果打折;一起用,才真正消除大量样板 null 检查、类型转换和边界判断。别把它当成高级特性去学,就当它是 C# 处理「不确定数据」的标准方式——就像你默认用 foreach 而不是手写 for 循环一样自然。









