INDIVIRTUAL - TECHNISCH PARTNER IN DIGITALE DIENSTVERLENING

C# 8.0: Recursieve patronen

February 27, 2019

C# 8.0: Recursieve patronen

Deze blog is onderdeel van een serie over nieuwe features in C# 8.0. Onderwerp van deze blog zijn de recursive patterns. Hiermee wordt het mogelijk om binnen een is al te controleren op velden van je object.

In C# 6.0 is al aardig wat pattern matching toegevoegd, en in C# 7.0 is daar alleen maar meer bij gekomen. We hebben bijvoorbeeld de mogelijkheid gekregen om in een if statement te controleren of iets een bepaald type is, en het dan meteen toe te wijzen. Mocht je dat nog niet eerder gebruikt hebben, dat ziet er ongeveer zo uit:

if (someObj is Person p)
{
    Console.WriteLine($"Dit is een persoon! Deze persoon heet {p.FirstName}. Welkom!");
}

Maar wat nu als je meteen wilt controleren of de persoon rijbewijs heeft? In C# 7.0 moest dit nog met een check in de if of een extra if statement binnen de eerdere, waardoor je met code als dit uitkwam:

if (someObj is Person p && p.HasDrivingLicense)
{
    Console.WriteLine($"Dit is een persoon! Deze persoon heet {p.FirstName} en heeft een rijbewijs.");
}

if (someObj is Person p)
{
    if (p.HasDrivingLicense)
    {
        Console.WriteLine($"Dit is een persoon! Deze persoon heet {p.FirstName} en heeft een rijbewijs.");
    }
}

Natuurlijk is dit al redelijk duidelijk, maar toch heeft C# 8.0 een manier om het nog net iets simpeler te schrijven. Helaas is dit wel beperkt tot enkel constanten, dus je kunt niet eenvoudig controleren of iemand bijvoorbeeld 18 jaar of ouder is. Natuurlijk zijn hier workarounds voor, zoals een property welke dynamisch een waarde bepaald. Bovenstaande if zou je met C# 8.0 kunnen herschrijven naar:

if (someObj is Person { HasDrivingLicense: true, FirstName: string name})
{
    Console.WriteLine($"Dit is een persoon! Deze persoon heet {name} en heeft een rijbewijs.");
}

Eventueel kun je na de expressie tussen curly braces nog een variabelenaam toevoegen zodat je de rest van het object ook krijgt. Dit levert echter weer wat minder mooie code op waardoor dit vooral mooi is als je maar één of twee velden nodig hebt binnen de if.

Zorg dat je ons volgt op Twitter, Facebook of LinkedIn voor meer nieuwe features in C# 8.0!

Sanne Bregman

Sanne Bregman

.NET Developer