SHARE:

Introducing C# 10: Extended property patterns

Introduction

C# 8 has introduced a new pattern: Property pattern. This pattern enables you to match on properties of the object examined, if you missed that feature, here is the Microsoft documentation here: Property pattern. C# 10 improves that pattern by simplifying access to nested properties. In the article I’ll show what it is.

Example

The following code sample shows a C# 8 tax calculator, which involves an object named CalculateTax and its nested property named ProvinceOrStateTaxProperty which is itself an object:

namespace DemoCsharp9
{
public class ProvinceOrStateTaxProperty
{
public string ProvinceOrState { get; set; }
}
public class CalculateTax
{
public string CountryName { get; set; }
public ProvinceOrStateTaxProperty ProvinceTaxProperty { get; set; }
}
public class Computing
{
private static decimal ComputePrice(CalculateTax calculate, decimal price) =>
calculate switch
{
{ ProvinceTaxProperty: { ProvinceOrState: "Québec" } } => 1.14975M * price,
{ ProvinceTaxProperty: { ProvinceOrState: "Alberta" } } => 1.05M * price,
{ ProvinceTaxProperty: { ProvinceOrState: "Ontario" } } => 1.13M * price,
_ => 0
};
}
}

The syntax to access the nested property is a bit verbose:

{ ProvinceTaxProperty: { ProvinceOrState: "Value" } }

C# 10 fixes that and allows to access directly the nested property by a dot:

namespace DemoCsharp10
{
public class ProvinceOrStateTax
{
public string ProvinceOrState { get; set; }
}
public class CountryTax
{
public string CountryName { get; set; }
public ProvinceOrStateTax ProvinceTaxProperty { get; set; }
}
public class Computing
{
private static decimal ComputePrice(CountryTax calculate, decimal price) =>
calculate switch
{
{ ProvinceTaxProperty.ProvinceOrState: "Québec" } => 1.14975M * price,
{ ProvinceTaxProperty.ProvinceOrState: "Alberta" } => 1.05M * price,
{ ProvinceTaxProperty.ProvinceOrState: "Ontario" } => 1.13M * price,
_ => 0
};
}
}

Much more practical isn’t it ? 😉

Written by

anthonygiretti

Anthony is a specialist in Web technologies (14 years of experience), in particular Microsoft .NET and learns the Cloud Azure platform. He has received twice the Microsoft MVP award and he is also certified Microsoft MCSD and Azure Fundamentals.