Beskyt mod null
Validering og mønstre.
Beskyt mod null er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 4 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.
Hvorfor kontrollere mod null?
En metode, der modtager en uventet null, går ofte ned senere med en forvirrende NullReferenceException dybt nede i kaldestakken.
En kontrol betyder, at du kontrollerer argumenterne på forhånd og fejler tydeligt, så fejlen peger direkte på den egentlige årsag.
Klassisk null-kontrol
Den enkleste kontrol er en eksplicit kontrol, der kaster en ArgumentNullException, når et påkrævet argument er null.
Det validerer input ved grænsen til din metode, før noget arbejde begynder.
void Save(string path)
{
if (path == null)
throw new System.ArgumentNullException(nameof(path));
System.Console.WriteLine(path);
}Brug nameof
Overfør nameof(path) i stedet for en fast kodet streng. Undtagelsen rapporterer derefter det præcise parameternavn, og det forbliver korrekt, hvis du omdøber parameteren.
Det gør fejlfinding langt nemmere, når undtagelsen logges.
void Greet(string user)
{
if (user is null)
throw new System.ArgumentNullException(nameof(user));
System.Console.WriteLine("Hi " + user);
}Hjælpefunktion til ThrowIfNull
Moderne C# tilbyder ArgumentNullException.ThrowIfNull(arg). Den kontrollerer for null og kaster automatisk en undtagelse med det korrekte parameternavn.
Det er kortfattet og den foretrukne stil til kontroller i moderne .NET-kode.
void Process(object data)
{
System.ArgumentNullException.ThrowIfNull(data);
System.Console.WriteLine("Processing");
}En kørbar kontrol
Dette program viser en kontrol, der opfanger et null-argument og rapporterer det tydeligt i stedet for at gå ned senere.
Kør det for at se undtagelsesmeddelelsen med navnet på den ugyldige parameter.
using System;
class Program
{
static void Print(string text)
{
ArgumentNullException.ThrowIfNull(text);
Console.WriteLine(text);
}
static void Main()
{
try { Print(null); }
catch (ArgumentNullException ex) { Console.WriteLine(ex.ParamName); }
}
}Kontrol med ?? throw
Du kan kombinere tildeling og kontrol ved at bruge ?? sammen med throw. Det validerer og gemmer værdien på én linje.
Det er et populært mønster i konstruktører, når en værdi tildeles til et felt.
class Service
{
private readonly string _name;
public Service(string name)
=> _name = name ?? throw new System.ArgumentNullException(nameof(name));
}Tom versus null
For strenge er null og tom forskellige problemer. Brug string.IsNullOrEmpty eller string.IsNullOrWhiteSpace til at fange begge på én gang.
En ArgumentException (ikke ArgumentNullException) passer til en tom, men ikke-null-værdi.
void SetName(string name)
{
if (string.IsNullOrWhiteSpace(name))
throw new System.ArgumentException("Name required", nameof(name));
}Kontrol med mønstre
Mønstrene is null og is not null er tydelige at læse og kan ikke snydes af overbelastede lighedsoperatorer.
Foretræk is null frem for == null, når en type muligvis tilsidesætter ==.
object value = null;
if (value is null)
System.Console.WriteLine("It is null");
if (value is not null)
System.Console.WriteLine("Has value");Standardværdi i stedet for at kaste
Ikke alle null-værdier er en fejl. Nogle gange er en fornuftig standardværdi bedre end en undtagelse.
Brug ??, når null er acceptabelt, og kast kun en undtagelse, når værdien virkelig er påkrævet.
string BuildPath(string folder)
{
folder ??= "/tmp";
return folder + "/file.txt";
}Nullable-referencetyper hjælper
Når nullable-referencetyper er aktiveret, advarer compileren, hvis du muligvis forsøger at tilgå en null-værdi via en reference, så fejl opdages før kørsel.
At erklære string (ikke-null) over for string? (nullable) dokumenterer din hensigt og hjælper analysatoren.
#nullable enable
string required = "ok";
string? optional = null;
System.Console.WriteLine(optional?.Length ?? 0);Kontrollér først, og brug derefter sikkert
Når du har kontrolleret værdien øverst i en metode, kan resten af metodekroppen bruge den uden gentagne null-kontroller.
Dette program kontrollerer først og bruger derefter argumentet med sikkerhed.
using System;
class Program
{
static int Length(string s)
{
ArgumentNullException.ThrowIfNull(s);
return s.Length;
}
static void Main()
{
Console.WriteLine(Length("hello"));
}
}Hurtig kontrol
Kontrollér din forståelse af kontroller mod null.
Opsummering
Kontrollér påkrævede argumenter i begyndelsen af en metode. Brug ArgumentNullException.ThrowIfNull eller ?? throw sammen med nameof for tydelige fejl.
Brug string.IsNullOrWhiteSpace til tomme strenge, mønstre som is null til sikre kontroller, og ??, når en standardværdi er acceptabel i stedet for at fejle.
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 “Beskyt mod null” gratis?
Ja — hele teksten til “Beskyt mod null” 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 “Beskyt mod null”?
Validering og mønstre. 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 4 af 4.
Hvor lang tid tager lektionen “Beskyt mod null”?
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.