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

幻夢星雲
发布: 2025-10-13 12:41:01
原创
923人浏览过
属性模式用于匹配对象属性值,可在is或switch表达式中直接解构对象。1. is表达式中检查属性:person is { Age: 30, Name: "Alice" };2. switch表达式分类:根据Age值返回“未成年人”“老年人”等;3. 支持嵌套:person2 is { Address: { City: "Beijing" } };4. 提取变量:{ Name: var name, Age: var age }可解构赋值;5. null安全:obj为null时返回false不抛异常。该模式提升代码简洁性与安全性。

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

属性模式用于在 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 } => "成年人",
    _ => "未知"
};
登录后复制

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

无阶未来模型擂台/AI 应用平台
无阶未来模型擂台/AI 应用平台

无阶未来模型擂台/AI 应用平台,一站式模型+应用平台

无阶未来模型擂台/AI 应用平台35
查看详情 无阶未来模型擂台/AI 应用平台

3. 嵌套属性模式

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

示例:

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

匹配的是 AddressCity 属性。

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。

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

以上就是C# 中的模式匹配属性模式如何用法?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号