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

星降
发布: 2025-12-13 22:25:24
原创
395人浏览过
C# 7 起引入模式匹配,逐步支持类型、常量、属性、解构等模式,通过 is 表达式和 switch 表达式实现简洁安全的数据判断与处理,提升代码可读性与安全性。

c# 模式匹配(pattern matching)的演进 - from is to switch expressions

从 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 表达式,支持任意类型的模式,并返回值。

OpenAI Codex
OpenAI Codex

可以生成十多种编程语言的工作代码,基于 OpenAI GPT-3 的自然语言处理模型

OpenAI Codex 144
查看详情 OpenAI Codex

看一个例子:将数字转换为描述字符串。

string description = number switch { 0 => "零", 1 => "一", >= 2 and "个位数", _ => "其他" };

这里使用了:

  • 常量模式:0、1
  • 关系模式:>= 2
  • 逻辑组合:and 连接多个条件
  • 弃元模式:_ 匹配所有情况

switch 表达式是表达式,必须覆盖所有可能路径或提供默认分支,编译器会做**穷尽性检查**,提升代码安全性。

高级用法:解构与位置模式

如果类型实现了 Deconstruct 方法,就可以在模式中使用解构模式

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) => (X, Y) = (x, y); public void Deconstruct(out int x, out int y) => (x, y) = (X, Y); }

然后可以直接在 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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号