Null-coalescing-operatorer
Standardværdier med ?? og ??=.
Null-coalescing-operatorer er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 3 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.
Angivelse af en reserveværdi
Ofte vil du bruge en værdi, hvis den findes, eller en standardværdi, hvis den er null. Null-sammensmeltningsoperatoren ?? gør netop dette.
a ?? b betyder: Brug a, hvis den ikke er null, ellers b.
string input = null;
string name = input ?? "Guest";
System.Console.WriteLine(name);Sådan evalueres ??
Venstre side evalueres først. Hvis den ikke er null, evalueres højre side slet ikke.
Denne kortslutning betyder, at en beregningstung reserveværdi kun udføres, når der faktisk er brug for den.
string cached = "data";
string value = cached ?? Compute();
System.Console.WriteLine(value);
// Compute() is never called hereFungerer med nullable-værdityper
?? udpakker også nullable-værdityper. int? maybe kombineret med ?? 0 giver en almindelig ikke-nullbar int.
Det er en enkel måde at konvertere fra int? til int med en standardværdi.
int? maybe = null;
int sure = maybe ?? 0;
System.Console.WriteLine(sure);Et kørbart eksempel
Dette program læser en muligvis null-værdi for en indstilling og bruger en standardværdi som reserve. Kør det for at se reserveværdien i funktion.
using System;
class Program
{
static void Main()
{
string theme = null;
string active = theme ?? "light";
Console.WriteLine("Theme: " + active);
}
}Kædning af ??
Du kan kæde flere reserveværdier. Udtrykket vælger den første ikke-null-værdi fra venstre mod højre.
a ?? b ?? c prøver først a, derefter b og til sidst c som sidste udvej.
string a = null;
string b = null;
string c = "default";
System.Console.WriteLine(a ?? b ?? c);Operatoren ??=
Den null-sammensmeltende tildeling ??= tildeler kun højre side, hvis venstre side aktuelt er null.
x ??= y er en kortform af if (x == null) x = y; og lader x være uændret, når den allerede har en værdi.
string config = null;
config ??= "default";
System.Console.WriteLine(config);
config ??= "ignored";
System.Console.WriteLine(config);Forsinket initialisering med ??=
En almindelig anvendelse af ??= er forsinket initialisering: Opret først et objekt, når der er brug for det.
Ved senere kald er feltet allerede sat, så ??= gør ingenting.
System.Collections.Generic.List<int> items = null;
items ??= new System.Collections.Generic.List<int>();
items.Add(1);
System.Console.WriteLine(items.Count);Kombinering af ?. og ??
Det er meget almindeligt at kombinere ?. med ??. ?. undgår undtagelsen, og ?? angiver en værdi, når kæden er null.
user?.Name ?? "Unknown" læser navnet sikkert og bruger "Unknown" som standardværdi.
string s = null;
int length = s?.Length ?? -1;
System.Console.WriteLine(length);?? i et helt program
Her arbejder både ?. og ?? sammen for at udskrive en sikker længde. Kør programmet med en null-streng for at se reserveværdien.
using System;
class Program
{
static void Main()
{
string username = null;
string display = username ?? "anonymous";
Console.WriteLine(display);
Console.WriteLine(username?.Length ?? 0);
}
}?? med throw ved null
Højre side af ?? kan være et hvilket som helst udtryk, herunder throw. Det gør ?? til en kort måde at få programmet til at fejle hurtigt ved en uventet null-værdi.
name ?? throw new ArgumentNullException(nameof(name)) returnerer navnet eller kaster en undtagelse, hvis det er null.
string Validate(string name) =>
name ?? throw new System.ArgumentNullException(nameof(name));Højreassociativ opførsel
?? er højreassociativ, så a ?? b ?? c grupperes som a ?? (b ?? c).
I praksis betyder det stadig, at den første ikke-null-værdi vinder, men det er nyttigt at vide, når du skal analysere komplekse udtryk.
int? a = null;
int? b = null;
int result = a ?? b ?? 99;
System.Console.WriteLine(result);Hurtig kontrol
Kontrollér din forståelse af null-sammensmeltningsoperatorerne.
Opsummering
?? returnerer venstre side, hvis den ikke er null, ellers højre side, og operatoren kan kædes. ??= tildeler kun, når målet er null, hvilket er ideelt til forsinket initialisering.
Kombinér dem med ?. for en sikker og kortfattet null-håndtering, og brug endda ?? throw til at få programmet til at fejle hurtigt.
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-coalescing-operatorer” gratis?
Ja — hele teksten til “Null-coalescing-operatorer” 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-coalescing-operatorer”?
Standardværdier med ?? og ??=. 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 3 af 4.
Hvor lang tid tager lektionen “Null-coalescing-operatorer”?
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