属性模式通过{PropertyName: pattern}语法检查对象属性值,要求对象非null且属性可读,支持常量、变量及嵌套匹配,如person is {Name: "Alice", Age: >=30}或employee is {Address: {City: "Beijing"}},并可用于switch表达式实现多条件分支,提升代码简洁性与可读性。

在 C# 中,属性模式(Property Pattern)用于在模式匹配中检查对象的属性值是否符合预期。它不关心对象的具体类型,只关注对象是否有指定的属性以及这些属性是否满足特定条件。
属性模式的基本语法
属性模式使用 { } 包裹一组属性名与子模式的组合,语法如下:
exampleObject is { PropertyName: pattern }如果 exampleObject 不为 null 且其 PropertyName 的值匹配 pattern,则整个模式匹配成功。
如何匹配对象属性
属性模式通过以下方式匹配对象:
- 对象不能为 null,否则匹配失败
- 对象必须具有模式中列出的公共可读属性
- 每个属性的值需满足对应的子模式(可以是常量、变量、递归模式等)
例如,判断一个 Person 对象的 Name 是否为 "Alice",Age 是否大于 30:
Perl 基础入门中文教程,chm格式,讲述PERL概述、简单变量、操作符、列表和数组变量、文件读写、模式匹配、控制结构、子程序、关联数组/哈希表、格式化输出、文件系统、引用、面向对象、包和模块等知识点。适合初学者阅读和了解Perl脚本语言。
{
Console.WriteLine("找到符合条件的 Alice");
}
嵌套属性匹配
属性模式支持嵌套,可以检查复杂对象的深层属性:
if (employee is { Address: { City: "Beijing", ZipCode: "100000" } }){
// 匹配地址城市为 Beijing 且邮编为 100000 的员工
}
这要求 employee 和 employee.Address 都不为 null,且对应属性匹配。
结合 with 表达式和 switch 模式
属性模式也常用于 switch 表达式中进行多条件分支判断:
return shape switch{
{ Type: "Circle", Radius: >= 0 } => "圆形",
{ Type: "Rectangle", Width: var w, Height: var h } => $"矩形 ({w}x{h})",
_ => "未知形状"
};
基本上就这些。属性模式让 C# 的模式匹配更贴近实际数据结构,写起来简洁又直观。只要对象有对应属性且值匹配,就能成功识别,无需强制类型转换。注意 null 值会直接导致匹配失败,设计时要考虑这一点。









