⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

递归模式匹配结合位置析构实现树形数据变换

利用C# 9+的递归模式与位置模式析构,一行代码完成复杂树结构的查询与变换。 · 难度:入门 · +10XP

递归模式与析构变换

传统方式处理树形数据(如JSON AST、表达式树)需要大量嵌套if和递归。本教程展示如何将位置模式(Positional Pattern)与递归模式结合,在switch表达式中直接匹配树节点结构并进行变换。例如对数学表达式进行符号求导,或对XML节点进行过滤。通过模式嵌套和when子句,代码简洁且类型安全,同时编译器帮忙检查穷尽性。

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

static string Simplify(Expr e) => e switch { Constant(0) => "0", Constant(var v) => v.ToString(), Add(Constant(0), var right) => Simplify(right), Add(var left, var right) => $"({Simplify(left)}+{Simplify(right)})", Mul(Constant(0), _) => "0", Mul(_, Constant(0)) => "0", Mul(var left, var right) => $"({Simplify(left)}*{Simplify(right)})", _ => "?" };

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 148 篇
0 完成
🔥 0