首页 > 常见问题 > 正文

C# 中的模式匹配递归模式如何匹配树结构?

畫卷琴夢
发布: 2025-10-24 14:55:01
原创
871人浏览过
递归模式结合record可自然匹配树结构,如用{ Left: null, Right: null }判断叶子节点,或嵌套模式识别子树形状,还可用于表达式树求值与简化,如Add(var e, Constant(0))映射为Simplify(e),实现声明式结构解析。

c# 中的模式匹配递归模式如何匹配树结构?

在 C# 中,模式匹配的递归模式(recursive patterns)可以自然地用来匹配树结构。通过结合 递归数据类型位置模式(positional patterns),你可以清晰地解构并判断节点结构、字段值或嵌套关系。

定义树结构

以二叉树为例,每个节点包含一个值和左右子节点:

public record TreeNode(int Value, TreeNode? Left, TreeNode? Right);

这是一个典型的不可变树结构,使用 record 支持基于值的相等性和位置解构,这是实现递归模式匹配的基础。

使用递归模式进行匹配

你可以用 switch 表达式is 表达式 来匹配树的形状。例如,判断是否为叶子节点(无子节点):

bool IsLeaf(TreeNode? node) => node is { Left: null, Right: null };

更复杂的结构可以用嵌套的位置模式。比如判断一个节点左子是叶子节点:

琅琅配音
琅琅配音

全能AI配音神器

琅琅配音89
查看详情 琅琅配音
bool HasLeftLeaf(TreeNode? node) => node is { Left: { Left: null, Right: null } };

你也可以结合常量和范围模式。例如,匹配某个特定形状的子树:

string Classify(TreeNode? node) => node switch { null => "Empty", { Value: 0, Left: null, Right: null } => "Zero leaf", { Value: var v, Left: { Value: var lv }, Right: null } when v > lv => "Right unbalanced", { Value: _, Left: not null, Right: not null } => "Full node", _ => "Other" };

实际应用场景

递归模式特别适合用于表达式树的分析。比如定义一个简单的算术表达式树:

public abstract record Expr; public record Constant(int Value) : Expr; public record Add(Expr Left, Expr Right) : Expr; public record Multiply(Expr Left, Expr Right) : Expr;

然后你可以用模式匹配来“解释”或优化表达式:

int Evaluate(Expr expr) => expr switch { Constant(int value) => value, Add(var left, var right) => Evaluate(left) + Evaluate(right), Multiply(var left, var right) => Evaluate(left) * Evaluate(right), _ => throw new NotSupportedException() };

还可以做代数简化,比如识别 x + 0 这样的模式:

Expr Simplify(Expr expr) => expr switch { Add(var e, Constant(0)) => Simplify(e), Add(Constant(0), var e) => Simplify(e), Multiply(var e, Constant(1)) => Simplify(e), // 更多规则... Add(var l, var r) => new Add(Simplify(l), Simplify(r)), _ => expr };

基本上就这些。递归模式让 C# 能以声明式方式处理复杂嵌套结构,尤其适合语法树、配置树或领域模型的条件判断与转换。关键是使用 record 提供的解构能力和模式中的嵌套匹配逻辑。不复杂但容易忽略的是:确保属性或位置可被编译器静态分析,否则模式无法生效。

以上就是C# 中的模式匹配递归模式如何匹配树结构?的详细内容,更多请关注php中文网其它相关文章!

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

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

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

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