C# 中的模式匹配递归模式如何用法?

来源:这里教程网 时间:2026-02-21 17:28:17 作者:

在 C# 中,递归模式(Recursive Patterns)是 C# 9 及以上版本引入的一种强大功能,主要用于解构复杂对象并检查其内部结构。它常用于

switch
表达式、
is
表达式中,特别适合处理嵌套的对象或记录类型。

基本语法

递归模式的基本形式是:

类型(模式) 或者 类型 { 属性模式 }

它可以结合属性解构和嵌套模式来匹配对象的结构。

使用记录类型进行递归匹配

C# 的

record
类型天然支持解构,非常适合递归模式。例如:

public record Person(string Name, int Age, Address Address);
public record Address(string City, string Country);

var person = new Person("Alice", 30, new Address("Beijing", "China"));

if (person is Person { Name: "Alice", Address: Address { City: "Beijing" } })
{
    Console.WriteLine("匹配成功");
}

这里通过

Person { Address: Address { City: "Beijing" } }
实现了对嵌套对象的递归匹配。

在 switch 表达式中使用递归模式

递归模式在

switch
表达式中也非常实用:

string result = person switch
{
    Person { Name: var name, Age: $"{name} 是未成年人",
    Person { Name: var name, Address: Address { Country: "China" } } => $"{name} 来自中国",
    _ => "其他情况"
};

这个例子中,根据年龄和地址信息进行分层判断,逻辑清晰且代码简洁。

结合位置解构使用

如果类型定义了

Deconstruct
方法,也可以用位置模式:

public class Point
{
    public int X { get; set; }
    public int Y { get; set; }

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

var point = new Point { X = 1, Y = 2 };

if (point is (1, 2))
{
    Console.WriteLine("点位于 (1, 2)");
}

这种写法也属于递归模式的一种,可用于自定义类型的解构匹配。

基本上就这些。递归模式让 C# 的模式匹配更接近函数式语言的风格,尤其配合

record
和不可变数据时,代码更安全、易读。只要类型支持属性访问或解构,就能用递归模式层层深入匹配。不复杂但容易忽略细节,比如属性名拼写、类型一致性等。

相关推荐