属性模式用于匹配对象属性值,可在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# 中检查对象的某些属性或字段是否符合指定条件,常用于 switch 表达式 或 is 表达式 中。它让你可以直接解构并匹配对象的属性值,而不需要先提取变量。
对象类型 { 属性名: 值模式 }
你可以嵌套多个属性,并结合其他模式(如常量、变量、递归模式等)使用。
判断一个对象的属性是否满足某个条件:
示例:
var person = new { Name = "Alice", Age = 30 };
<p>if (person is { Age: 30, Name: "Alice" })
{
Console.WriteLine("匹配成功");
}
只有当 Age 是 30 且 Name 是 "Alice" 时才会进入 if 块。
可用于根据对象的不同属性组合返回不同结果:
示例:
string result = person switch
{
{ Age: < 18 } => "未成年人",
{ Age: >= 65 } => "老年人",
{ Age: >= 18 and < 65 } => "成年人",
_ => "未知"
};
这里用到了关系模式(<, >=)与属性模式结合,非常简洁地完成分类。
如果对象包含复杂属性,也可以进行嵌套匹配:
示例:
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 属性。
可以同时匹配并提取属性值到变量中:
示例:
if (person is { Name: var name, Age: var age })
{
Console.WriteLine($"姓名: {name}, 年龄: {age}");
}
这相当于从对象中“解构”出属性值,便于后续使用。
属性模式在访问属性时会自动处理 null 情况。例如:
object obj = null;
bool isYoung = obj is { Age: < 18 }; // false,不会抛异常
即使 obj 为 null,表达式安全返回 false,不会引发 NullReferenceException。
基本上就这些。属性模式让代码更清晰、简洁,特别适合做数据形状匹配。不复杂但容易忽略细节,比如大小写敏感和类型匹配。
以上就是C# 中的模式匹配属性模式如何用法?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号