推荐答案
// www.javascriptcn.com code example
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public static string GetPersonInfo(Person person) => person switch
{
{ Name: "Alice", Age: 30 } => "This is Alice, aged 30.",
{ Name: "Bob", Age: 25 } => "This is Bob, aged 25.",
{ Age: < 18 } => "This is a minor.",
{ Name: var name, Age: var age } => $"This is {name}, aged {age}.",
_ => "Unknown person."
};本题详细解读
属性模式简介
属性模式(Property Pattern)是C# 8.0引入的一种模式匹配方式,允许你在模式匹配中直接匹配对象的属性。通过属性模式,你可以根据对象的属性值来执行不同的逻辑。
代码解析
- Person类:定义了一个简单的
Person类,包含Name和Age两个属性。 - GetPersonInfo方法:该方法使用
switch表达式和属性模式来匹配Person对象的属性。{ Name: "Alice", Age: 30 }:匹配Name为"Alice"且Age为30的Person对象。{ Name: "Bob", Age: 25 }:匹配Name为"Bob"且Age为25的Person对象。{ Age: < 18 }:匹配Age小于18的Person对象。{ Name: var name, Age: var age }:匹配任意Person对象,并将Name和Age分别绑定到name和age变量。_:默认情况,匹配所有其他情况。
使用场景
属性模式非常适合用于处理复杂对象的条件判断,尤其是在需要根据对象的多个属性值来决定执行逻辑时。它可以使代码更加简洁和易读。
注意事项
- 属性模式只能用于C# 8.0及以上版本。
- 在使用属性模式时,确保对象的属性是可访问的(即
public或internal)。