C# 中的模式匹配属性模式如何用法?

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

属性模式用于在 C# 中检查对象的某些属性或字段是否符合指定条件,常用于 switch 表达式is 表达式 中。它让你可以直接解构并匹配对象的属性值,而不需要先提取变量。

基本语法

pattern:

对象类型 { 属性名: 值模式 }

你可以嵌套多个属性,并结合其他模式(如常量、变量、递归模式等)使用。

1. 在 is 表达式中使用属性模式

判断一个对象的属性是否满足某个条件:

示例:

var person = new { Name = "Alice", Age = 30 };
<p>if (person is { Age: 30, Name: "Alice" })
{
Console.WriteLine("匹配成功");
}

只有当

Age
是 30 且
Name
是 "Alice" 时才会进入 if 块。

2. 结合 switch 表达式使用

可用于根据对象的不同属性组合返回不同结果:

示例:

string result = person switch
{
    { Age: < 18 } => "未成年人",
    { Age: >= 65 } => "老年人",
    { Age: >= 18 and < 65 } => "成年人",
    _ => "未知"
};

这里用到了关系模式(=)与属性模式结合,非常简洁地完成分类。

3. 嵌套属性模式

如果对象包含复杂属性,也可以进行嵌套匹配:

示例:

var address = new { City = "Beijing", ZipCode = "100000" };
var person2 = new { Name = "Bob", Address = address };
<p>if (person2 is { Address: { City: "Beijing" } })
{
Console.WriteLine("居住在北京");
}

匹配的是

Address
City
属性。

4. 使用属性模式提取值(带变量声明)

可以同时匹配并提取属性值到变量中:

示例:

if (person is { Name: var name, Age: var age })
{
    Console.WriteLine($"姓名: {name}, 年龄: {age}");
}

这相当于从对象中“解构”出属性值,便于后续使用。

5. 与 null 安全结合

属性模式在访问属性时会自动处理 null 情况。例如:

object obj = null;
bool isYoung = obj is { Age: < 18 }; // false,不会抛异常

即使 obj 为 null,表达式安全返回 false,不会引发 NullReferenceException。

基本上就这些。属性模式让代码更清晰、简洁,特别适合做数据形状匹配。不复杂但容易忽略细节,比如大小写敏感和类型匹配。

相关推荐