Gå til indholdet

Nullable reference types

Nullable reference types er en ny funktion introduceret i C# 8.0, der giver udviklere mulighed for at udtrykke deres hensigter mere klart omkring, hvilke referencetyper der kan indeholde null værdier. Funktionen hjælper med at reducere risikoen for at støde på NullReferenceException ved at give bedre kontrol over, hvilke referencetyper der kan have null værdier og hvilke der ikke kan. Dette forbedrer kodekvaliteten og sikkerheden, da det hjælper udviklere med at undgå utilsigtet brug af null værdier.

Ved at bruge nullable reference types kan udviklere angive, om en given reference type er forventet at kunne indeholde null eller ej. Kompileren vil advare dig, hvis du prøver at tildele null til en variabel eller egenskab, der ikke forventes at indeholde null, eller hvis du forsøger at få adgang til den uden først at kontrollere, om den er null. Dette gør det nemmere at opdage potentielle null reference fejl ved kompileringstidspunktet i stedet for kørselstidspunktet og reducerer risikoen for fejl i dit program.

Eksempel

I dette afsnit vil vi tage et kig på et eksempel, der viser forskellen mellem en almindelig reference type (string) og en nullable reference type (string?).

class Person
{
    public string Navn { get; set; }
}

class PersonNullable
{
    public string? Navn { get; set; }
}

I eksemplet ovenfor har vi to klasser, Person og PersonNullable. I Person-klassen er Navn-egenskaben af typen string. Det betyder, at kompileren antager, at denne egenskab altid skal have en værdi og ikke må være null. Hvis du prøver at tildele null til denne egenskab, vil kompileren give en advarsel, og du skal sikre, at egenskaben har en værdi, før du får adgang til den.

I PersonNullable-klassen er Navn-egenskaben af typen string?, hvilket betyder, at den kan indeholde null værdier. Kompileren vil ikke give advarsler for at tildele null til denne egenskab, men den vil kræve, at du håndterer potentielle null værdier, før du får adgang til denne egenskab.

Ved at bruge almindelige reference typer og nullable reference typer korrekt, kan du udtrykke dine hensigter tydeligere og få kompileren til at hjælpe dig med at opdage potentielle fejl relateret til null værdier i dit program.

Operatorer

C# tilbyder forskellige operatører, der kan hjælpe dig med at arbejde med nullable reference types og null værdier på en mere sikker og bekvem måde:

  1. Null Conditional Operator (?): Null conditional operatøren kan bruges til at få adgang til medlemmer og elementer i en variabel, der potentielt kan være null. Hvis variablen er null, returnerer operatøren null i stedet for at kaste en NullReferenceException.

Eksempel:

PersonNullable person = new PersonNullable();
string? fornavn = person?.Navn;

I eksemplet ovenfor vil ‘fornavn’ variablen blive sat til null, hvis ‘person’ variablen er null, i stedet for at kaste en NullReferenceException.

  1. Null Coalescing Operator (??): Null coalescing operatøren kan bruges til at give en standardværdi, hvis en variabel eller udtryk er null. Dette er en nem måde at undgå NullReferenceException på, når du arbejder med nullable reference types.

Eksempel:

string navn = personNullable.Navn ?? "Ingen navn";

I eksemplet ovenfor vil ‘navn’ variablen blive sat til personNullable.Navn, hvis det ikke er null, eller “Ingen navn”, hvis personNullable.Navn er null.

  1. Null Forgiving Operator (!): Null forgiving operatøren bruges til at undertrykke advarsler om mulige null reference adgang. Det bør kun bruges, når du er sikker på, at en variabel ikke vil være null, men kompileren er ikke i stand til at afgøre dette.

Eksempel:

string navn = personNullable.Navn!;

Ved at bruge disse operatører kan du arbejde med nullable reference types og null værdier på en mere sikker og bekvem måde.

Aktivering

For at aktivere nullable reference types i dit projekt, skal du tilføje følgende linje til dit .csproj-fil:

<PropertyGroup>
  <Nullable>enable</Nullable>
</PropertyGroup>

Dette vil aktivere nullable reference types for hele projektet. Hvis du ønsker at slå nullable reference types fra igen, kan du enten fjerne linjen fra .csproj-filen eller ændre værdien til “disable”:

<PropertyGroup>
  <Nullable>disable</Nullable>
</PropertyGroup>

Således kan du aktivere og deaktivere nullable reference types i dit projekt ved at justere værdien af -elementet i din .csproj-fil.

Warning / Errors

For at ændre advarsler vedrørende nullable reference types til fejl i dit projekt, skal du tilføje følgende linje til dit .csproj-fil:

<PropertyGroup>
  <WarningsAsErrors>nullable</WarningsAsErrors>
</PropertyGroup>

Ved at tilføje denne indstilling i .csproj-filen, vil alle advarsler relateret til nullable reference types blive behandlet som fejl, og kompileringen vil ikke lykkes, medmindre alle sådanne problemer er løst. Dette kan hjælpe med at sikre en endnu højere kodekvalitet og opmærksomhed omkring håndtering af null værdier i dit projekt.