INDIVIRTUAL - TECHNISCH PARTNER IN DIGITALE DIENSTVERLENING

C# 8.0: Nullable Reference Types

February 6, 2019

C# 8.0: Nullable Reference Types

Deze blog is onderdeel van een serie over nieuwe features in C# 8.0. Onderwerp van deze blog zijn de Nullable Reference Types die in C# 8.0 toegevoegd worden.

We hebben het allemaal meer dan eens meegemaakt, een NullReferenceException zonder een duidelijke plek waar deze nu precies vandaan komt. Om dit te voorkomen zit er in C# 8.0 een nieuwe feature genaamd Nullable Reference Types. Hiermee geef je eenvoudig aan of een variabele null mag zijn of niet.

Deze blog is zelf te volgen als je Visual Studio 2019 Preview hebt geïnstalleerd, samen met de .NET Core 3.0 preview. Deze laatste komt mee met Visual Studio 2019 Preview als je de Cross Platform optie aanzet. Dit is waar voor zowel deze blog als alle volgende in deze serie. Vergeet niet om de taalversie expliciet op C# 8.0 (Beta) te zetten, anders gaat geen van de demo’s uit deze serie voor je werken.

Laten we beginnen met het schrijven van een stuk slechte code zodat we deze nieuwe feature kunnen demonstreren:

using System;

class Program
{
    static void Main(string[] args)
    {
        string s = null;
        Console.WriteLine($"De eerste letter van {s} is {s[0]}");
    }
}

Op het moment dat je deze code uitvoert in een C# Console App zul je een NullReferenceException krijgen op de Console.WriteLine. De eerste verbetering in C# 8.0 is dat er nu netjes getoond wordt wat er null is zodat je makkelijker kunt debuggen. In dit geval had je misschien bedoeld om s op te halen van de gebruiker of om deze op een andere manier te vullen. Wat je met C# 8.0 kunt doen is zorgen dat dit geen runtime error meer is, maar dat het een compile-time error wordt. Om dit te realiseren moet je de Nullable Reference Types feature handmatig aanzetten. Hier is voor gekozen omdat het mogelijk veel oude code breekt.

Om dit aan te zetten in Visual Studio 2019 Preview 2 plaats je op regel 1 het statement #nullable enable. Later wordt dit een optie die gelezen wordt uit je csproj bestand, waar je het aan kunt zetten door onderstaande PropertyGroup eraan toe te te voegen. Voor meer informatie over de status daarvan kun je issue 4058 volgen in de dotnet/project-system issue tracker op GitHub.

<PropertyGroup>
    <NullableReferenceTypes>true</NullableReferenceTypes>
    <LangVersion>8.0</LangVersion>
</PropertyGroup>

Als je deze wijzigingen doorvoert en opnieuw compileert zul je zien dat je nu een waarschuwing tijdens het compileren dat je null toewijst aan een waarde die niet expliciet null mag zijn. Mocht de variabele af en toe wel null moeten zijn dan kun je dit aanpassen door het type aan te passen naar string?, net zoals je “vroeger” dus een nullable type aanmaakte.

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

Sanne Bregman

Sanne Bregman

.NET Developer