boxmoe_header_banner_img

Hello! 欢迎来到悠悠畅享网!

文章导读

C# 中的模式匹配属性模式如何匹配对象?


avatar
作者 2025年10月13日 4

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

C# 中的模式匹配属性模式如何匹配对象?

c# 中,属性模式(Property Pattern)用于在模式匹配中检查对象的属性值是否符合预期。它不关心对象的具体类型,只关注对象是否有指定的属性以及这些属性是否满足特定条件。

属性模式的基本语法

属性模式使用 { } 包裹一组属性名与子模式的组合,语法如下:

exampleObject is { PropertyName: pattern }

如果 exampleObject 不为 null 且其 PropertyName 的值匹配 pattern,则整个模式匹配成功。

如何匹配对象属性

属性模式通过以下方式匹配对象:

  • 对象不能为 null,否则匹配失败
  • 对象必须具有模式中列出的公共可读属性
  • 每个属性的值需满足对应的子模式(可以是常量、变量、递归模式等)

例如,判断一个 Person 对象的 Name 是否为 “Alice”,Age 是否大于 30:

C# 中的模式匹配属性模式如何匹配对象?

北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 – 带您走进沉浸式AI的双语对照体验

C# 中的模式匹配属性模式如何匹配对象?0

查看详情 C# 中的模式匹配属性模式如何匹配对象?

if (person is { Name: “Alice”, Age: >= 30 })
{
  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 值会直接导致匹配失败,设计时要考虑这一点。



评论(已关闭)

评论已关闭

text=ZqhQzanResources