C# 模式匹配(Pattern Matching)的演进 - from is to switch expressions

admin 百科 12
C# 7 起引入模式匹配,逐步支持类型、常量、属性、解构等模式,通过 is 表达式和 switch 表达式实现简洁安全的数据判断与处理,提升代码可读性与安全性。

C# 模式匹配(Pattern Matching)的演进 - from is to switch expressions-第1张图片-佛山资讯网

从 C# 7 开始,模式匹配(Pattern Matching)逐渐成为语言中强大而优雅的特性。它让开发者能以更简洁、更具表达力的方式进行类型判断和数据解构。这一能力从简单的 is 类型检查逐步演进到功能完整的 switch 表达式,体现了 C# 向函数式编程风格融合的趋势。

早期:基于 is 的类型模式

在 C# 7 之前,类型判断通常使用 is 关键字配合强制转换:

// 传统方式 if (obj is string) { string s = (string)obj; Console.WriteLine(s.Length); }

这种方式冗长且容易出错。C# 7 引入了“类型模式”的 is 语法,允许在判断的同时声明变量:

if (obj is string s) { Console.WriteLine(s.Length); // s 在此作用域内可用 }

这不仅减少了代码量,还避免了重复转换。类似的,还可以结合 when 子句进行条件过滤:

if (obj is string s && s.Length > 0) { Console.WriteLine($"非空字符串: {s}"); }

扩展:常量模式与属性模式

除了类型,模式匹配也支持常量和对象结构的判断。

常量模式可用于判断值是否等于某个常量:

if (value is null) { ... } if (input is "quit") { ... }

属性模式则允许你根据对象的属性结构进行匹配。例如判断一个点是否位于原点:

if (point is { X: 0, Y: 0 }) { Console.WriteLine("原点"); }

也可以嵌套使用:

if (person is { Address: { City: "Beijing", ZipCode: "100000" } }) { Console.WriteLine("北京用户"); }

这种写法清晰表达了“数据形状”的意图,比层层 if 判断更直观。

跃迁:switch 语句到 switch 表达式

传统的 switch 语句只能用于常量标签,且语法繁琐。C# 8 开始引入 switch 表达式,支持任意类型的模式,并返回值。

标签: switch c# 作用域 代码可读性

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~