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

从 C# 7 开始,模式匹配(Pattern Matching)逐渐成为语言中强大而优雅的特性。它让开发者能以更简洁、更具表达力的方式进行类型判断和数据解构。这一能力从简单的 is 类型检查逐步演进到功能完整的 switch 表达式,体现了 C# 向函数式编程风格融合的趋势。
在 C# 7 之前,类型判断通常使用 is 关键字配合强制转换:
这种方式冗长且容易出错。C# 7 引入了“类型模式”的 is 语法,允许在判断的同时声明变量:
这不仅减少了代码量,还避免了重复转换。类似的,还可以结合 when 子句进行条件过滤:
除了类型,模式匹配也支持常量和对象结构的判断。
常量模式可用于判断值是否等于某个常量:
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 语句只能用于常量标签,且语法繁琐。C# 8 开始引入 switch 表达式,支持任意类型的模式,并返回值。
看一个例子:将数字转换为描述字符串。
string description = number switch { 0 => "零", 1 => "一", >= 2 and "个位数", _ => "其他" };这里使用了:
switch 表达式是表达式,必须覆盖所有可能路径或提供默认分支,编译器会做**穷尽性检查**,提升代码安全性。
如果类型实现了 Deconstruct 方法,就可以在模式中使用解构模式。
然后可以直接在 switch 中解构:
var result = point switch { (0, 0) => "原点", (0, _) => "Y轴上", (_, 0) => "X轴上", var (x, y) when x == y => "在 y=x 线上", _ => "其他位置" };这种写法非常接近数学表达,极大提升了可读性。
C# 的模式匹配从最初的 is 类型检查,发展到支持属性、关系、逻辑组合和解构的完整系统,最终通过 switch 表达式实现函数式风格的数据处理。它让代码更简洁、安全、富有表达力。现代 C# 开发中,合理使用模式匹配可以显著减少样板代码,提高逻辑清晰度。
基本上就这些。
以上就是C# 模式匹配(Pattern Matching)的演进 - from is to switch expressions的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号