Null-conditional-operatoren
Sikker adgang med ?..
Null-conditional-operatoren er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 4 lektioner i alt.
Problemet med null-kæder
Hvis du tilgår et medlem på en null-reference, kastes en NullReferenceException. Det er en af de mest almindelige nedbrud under kørsel i C#.
Når du kæder kald som user.Address.City, kan ethvert led i kæden være null, og den gamle løsning var et tårn af if-kontroller.
Mød ?.
Den null-betingede operator ?. kortslutter hele udtrykket. Hvis venstre side er null, bliver resultatet null i stedet for en undtagelse.
Det kan læses som: "tilgå dette medlem, men kun hvis objektet ikke er null."
string name = null;
int? length = name?.Length;
System.Console.WriteLine(length == null);Resultatet bliver nullable
Fordi ?. kan give null, bliver resultattypen nullable. name?.Length er int?, ikke int.
Derfor gemmer du den i en int? i stedet for en almindelig int.
string text = "hello";
int? len = text?.Length;
System.Console.WriteLine(len);Et kørbart eksempel
Dette program viser, at ?. returnerer en værdi, når objektet findes, og null, når det ikke gør.
Kør programmet, og bemærk, at der aldrig kastes en undtagelse.
using System;
class Program
{
static void Main()
{
string a = "world";
string b = null;
Console.WriteLine(a?.ToUpper());
Console.WriteLine(b?.ToUpper() ?? "(null)");
}
}Kædning af flere ?.
Du kan kæde ?. på tværs af flere medlemmer. Så snart en del er null, stopper hele kæden og returnerer null.
Derfor er customer?.Order?.Total sikker, selv hvis customer eller Order er null.
string s = null;
int? upperLen = s?.ToUpper()?.Length;
System.Console.WriteLine(upperLen == null);Null-betinget indeksering ?[]
Der findes en indeksform, ?[], til arrays og lister. Hvis samlingen er null, returnerer indeksopslaget null i stedet for at få programmet til at gå ned.
Bemærk: Den beskytter mod, at samlingen er null, men ikke mod et indeks uden for området.
int[] data = null;
int? first = data?[0];
System.Console.WriteLine(first == null);Sikker kald af metoder
?. beskytter også metodekald. list?.Clear() kalder kun Clear, hvis list ikke er null; ellers sker der ingenting.
For en metode, der returnerer void, bliver hele sætningen blot til en handling uden effekt, når værdien er null.
System.Collections.Generic.List<int> list = null;
list?.Add(5);
System.Console.WriteLine("No crash");Trådsikker udløsning af hændelser
En klassisk anvendelse er at udløse hændelser. SomeEvent?.Invoke(this, args) udløser kun hændelsen sikkert, når mindst én hændelsesbehandler er tilmeldt.
Dette erstattede det gamle null-kontrolmønster, som kunne give en race condition mellem kontrollen og kaldet.
System.Action handler = null;
handler?.Invoke();
System.Console.WriteLine("Invoked safely");Kombinering med ??
?. kombineres naturligt med null-sammensmeltningsoperatoren ?? for at angive en reserveværdi, når kæden er null.
name?.Length ?? 0 giver længden eller 0, hvis name er null.
string name = null;
int length = name?.Length ?? 0;
System.Console.WriteLine(length);En subtil faldgrube
Selv når den endelige værditype ikke er nullable, gør brugen af ?. udtrykket nullable. list?.Count er int?, ikke int.
Hvis du har brug for en almindelig int, skal du følge det med ?? 0 eller bruge GetValueOrDefault().
var list = new System.Collections.Generic.List<int> { 1, 2 };
int count = list?.Count ?? 0;
System.Console.WriteLine(count);Fuld sammenligning
Dette program sammenligner den omstændelige if-tilgang med den korte ?.-version. Begge undgår undtagelsen, men ?. er langt mere overskuelig.
using System;
class Program
{
static void Main()
{
string s = null;
int len = s != null ? s.Length : -1;
Console.WriteLine(len);
Console.WriteLine(s?.Length ?? -1);
}
}Hurtig kontrol
Kontrollér din forståelse af den null-betingede operator.
Opsummering
Den null-betingede operator ?. (og indekseringsoperatoren ?[]) stopper et medlemsopslag, når objektet er null, og returnerer null i stedet for at kaste en undtagelse.
Resultatet bliver nullable, så kombinér det med ?? for at angive en reserveværdi.
Lær C# med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 93
- Lektioner
- 346
Ofte stillede spørgsmål
Er lektionen “Null-conditional-operatoren” gratis?
Ja — hele teksten til “Null-conditional-operatoren” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Null-conditional-operatoren”?
Sikker adgang med ?.. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C# Academy?
Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Null-conditional-operatoren”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C# Academy-lektion?
Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Nullable-værdityper
- Null-conditional-operatoren
- Null-coalescing-operatorer
- Beskyt mod null