Nullable-værdityper
int? og Nullable-structen.
Nullable-værdityper er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 1 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 nullbare værdityper?
Værdityper som int, bool og DateTime indeholder altid en værdi. En int har som standard værdien 0 og kan aldrig betyde "ingen værdi".
Nogle gange skal du kunne repræsentere manglende data, f.eks. et ubesvaret felt i en spørgeskemaundersøgelse eller en tom kolonne i en database. Nullbare værdityper gør det muligt for en værditype også at indeholde null.
Deklaration med int?
Føj en ? efter en værditype for at gøre den nullbar. int? kan indeholde ethvert heltal eller null.
Det er den mest almindelige måde, du skriver nullbare værdityper på i almindelig C#-kode.
int? age = null;
int count = 5;
age = count;
System.Console.WriteLine(age);Nullable<T> bag kulisserne
Syntaksen med ? er en kortform. int? er præcis den samme type som Nullable<int>.
Nullable<T> er en struct, der indpakker en værditype og tilføjer en markering, som holder styr på, om der findes en værdi.
Nullable<int> a = 10;
int? b = 10;
System.Console.WriteLine(a == b);HasValue og Value
Enhver nullbar værdi stiller to egenskaber til rådighed. HasValue er true, når der findes en værdi, og Value returnerer den underliggende værdi.
Hvis du læser Value, når HasValue er false, kastes en InvalidOperationException. Derfor skal du kontrollere det først.
int? score = 42;
if (score.HasValue)
{
System.Console.WriteLine(score.Value);
}Et komplet eksempel
Her er et komplet program. Det tildeler en værdi, kontrollerer HasValue og udskriver resultatet.
Kør det for at se, hvordan en nullbar værdi opfører sig, når den faktisk indeholder data.
using System;
class Program
{
static void Main()
{
int? temperature = 21;
if (temperature.HasValue)
Console.WriteLine("Temp: " + temperature.Value);
else
Console.WriteLine("No reading");
}
}Når den er null
Hvis du tildeler null, returnerer HasValue false. Derefter køres else-grenen.
Dette mønster er en sikker måde at håndtere valgfrie aflæsninger på, uden at programmet går ned.
using System;
class Program
{
static void Main()
{
int? temperature = null;
if (temperature.HasValue)
Console.WriteLine(temperature.Value);
else
Console.WriteLine("No reading");
}
}GetValueOrDefault
GetValueOrDefault() returnerer værdien, hvis den findes, ellers standardværdien for typen (for eksempel 0 for int).
Du kan også angive din egen reserveværdi: GetValueOrDefault(100) returnerer 100, når værdien er null.
int? quantity = null;
int result = quantity.GetValueOrDefault(100);
System.Console.WriteLine(result);Implicit konvertering til nullable
En almindelig int konverteres automatisk til int?, fordi enhver almindelig værdi også er en gyldig nullable-værdi.
Det omvendte sker ikke automatisk: at gå fra int? tilbage til int kræver en eksplicit typekonvertering eller en reserveværdi, fordi den nullable værdi kan være null.
int plain = 7;
int? wrapped = plain;
int back = (int)wrapped;
System.Console.WriteLine(back);Nullable med andre værdityper
Alle værdityper kan bruges: bool?, double?, DateTime? og endda brugerdefinerede strukturer.
En bool? har tre tilstande: true, false og null, hvilket er nyttigt til ubesvarede ja- eller nej-spørgsmål.
bool? agreed = null;
double? price = 9.99;
System.Console.WriteLine(agreed.HasValue);
System.Console.WriteLine(price.Value);Referencetyper er allerede nullable
Klasser som string og arrays kan allerede være null, så de har ikke brug for omslaget Nullable<T>.
? på referencetyper (som string?) betyder noget andet: Det er en annotation for nullable-referencer, ikke strukturen Nullable<T>.
Sammenligning af nullable-værdier
Sammenligninger fungerer, men husk, at null opfører sig særligt. To null-værdier er ens, og enhver ordnet sammenligning, der involverer null, returnerer false.
Derfor er null < 5 false, og null > 5 er også false.
int? x = null;
System.Console.WriteLine(x < 5);
System.Console.WriteLine(x == null);Hurtig kontrol
Kontrollér din forståelse af nullable-værdityper.
Opsummering
Nullable-værdityper gør det muligt for værdityper også at indeholde null. Skriv dem som int?, hvilket svarer til Nullable<int>.
Brug HasValue til at kontrollere, Value til at læse værdien (kun når den findes), og GetValueOrDefault() som en sikker reserveværdi. Referencetyper er allerede nullable i sig selv.
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 “Nullable-værdityper” gratis?
Ja — hele teksten til “Nullable-værdityper” 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 “Nullable-værdityper”?
int? og Nullable-structen. 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 1 af 4.
Hvor lang tid tager lektionen “Nullable-værdityper”?
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