k8凯发国际
c# 中的模式匹配属性模式如何匹配匿名类型?

c# 中的模式匹配属性模式如何匹配匿名类型? -k8凯发国际

2025-10-0630946

属性模式可匿名类型属性值,因编译器会生成含公共只读属性的类。如 var person = new { name = "alice", age = 30 }; 可用 if (person is { name: "alice", age: 30 }) 检查属性,或在 switch 表达式中按结构分支,支持全属性或部分属性匹配,无需知晓具体类型名。

在 c# 中,属性模式(property pattern)可以用于匹配对象的属性值,即使该对象是匿名类型。这是因为匿名类型在编译时会生成一个具有公共只读属性的类,这些属性可以直接通过属性模式进行匹配。

匿名类型的特性

当你创建一个匿名类型时,例如:


var person = new { name = "alice", age = 30 };

c# 编译器会在后台生成一个不可变的密封类,包含公共的 nameage 属性。这使得你可以使用属性模式来解构和匹配这些属性。

使用属性模式匹配匿名类型

你可以在 switch 表达式或 is 表达式中使用属性模式来检查匿名对象的结构和值:


if (person is { name: "alice", age: 30 })
{
   console.writeline("匹配成功");
}

这段代码检查 person 是否具有 name 等于 "alice" 且 age 等于 30 的属性。只要属性名称和值匹配,表达式就返回 true。

天工大模型

中国首个对标chatgpt的双千亿级大语言模型

115

查看详情

也可以只匹配部分属性:


if (person is { name: "alice" })
{
   console.writeline("名字是 alice");
}

这里不关心 age 的值,只要 name 是 "alice" 就匹配成功。

在 switch 表达式中使用

属性模式也适用于 switch 表达式:


string result = person switch
{
   { name: "alice", age: 30 } => "alice, 30岁",
   { name: "bob" } => "bob",
   _ => "未知"
};

这种写法清晰地表达了基于对象结构的多条件分支逻辑。

基本上就这些。只要匿名类型的属性名和目标一致,属性模式就能正常工作,无需知道具体类型名称。

以上就是c# 中的模式匹配属性模式如何匹配匿名类型?的详细内容,更多请关注点滴网【www.vycc.cn】。

标签:
网站地图