Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Tip
Dit artikel maakt deel uit van de sectie Grondbeginselen voor ontwikkelaars die ten minste één programmeertaal kennen en C# leren. Als u nieuw bent in programmeren, begint u eerst met de Aan de slag-handleidingen. Zie Nullable-waardetypen in de taalreferentie voor meer informatie.
Een null-waardetypeT? vertegenwoordigt alle waarden van het onderliggende waardetype T, plus een extra null waarde. Een variabele van het type int? bevat een geheel getal of null om 'geen waarde' weer te geven.
Waardetypen zoals int, boolen DateTime kunnen niet standaard worden opgeslagen null . Dit gedrag is efficiënt en voorkomt veel fouten. Deze beperking creëert echter een probleem wanneer een waarde echt afwezig kan zijn. Een veelvoorkomend scenario is het lezen van een database: een kolom met gehele getallen kan een getal bevatten of bevat helemaal geen waarde (NULL in SQL). Een vlakte int kan die afwezigheid niet vertegenwoordigen, maar int? wel.
Een nullbaar waarde type declareren
Maak een waardetype nullable door er \
int? age = null; // integer with no value yet
double? price = 9.99; // nullable double with a value
bool? isActive = null; // boolean with no value
age = 30; // assign a value later
int?[] scores = [100, null, 85, null, 72]; // array with absent entries
De standaardwaarde van een nullable waardetype is null, niet de standaardwaarde van het onderliggende type.
Controleren of een waarde aanwezig is
De aanbevolen manier om een type null-waarde te controleren en de waarde ervan te extraheren, is met een typepatroon:
int? temperature = 72;
if (temperature is int degrees)
{
Console.WriteLine($"Temperature is {degrees}°F.");
}
else
{
Console.WriteLine("Temperature is not recorded.");
}
// Output: Temperature is 72°F.
Het is int degrees patroon komt alleen overeen wanneer temperature niet null is en verbindt de waarde tegelijkertijd met degrees. U krijgt zowel de null-controle als de waardeextractie in één stap.
U kunt ook de HasValue en Value eigenschappen gebruiken:
int? count = 42;
if (count.HasValue)
{
Console.WriteLine($"Count is {count.Value}.");
}
else
{
Console.WriteLine("Count has no value.");
}
// Output: Count is 42.
Geef de voorkeur aan het is T value patroon voor nieuwe code. Het introduceert een nieuwe niet-nulleerbare variabele die geschaald is naar de overeenkomende tak, waardoor de intentie duidelijker wordt en elke verleiding om Value per ongeluk buiten een null-controle te gebruiken, wordt geëlimineerd, wat een InvalidOperationException zou veroorzaken.
U kunt ook rechtstreeks vergelijken met null:
int? quantity = null;
if (quantity != null)
{
Console.WriteLine($"Quantity: {quantity.Value}");
}
else
{
Console.WriteLine("Quantity is not set.");
}
// Output: Quantity is not set.
Een waarde ophalen met een reserveoptie
Wanneer u een niet-null-waarde van een nullable nodig hebt, gebruikt u GetValueOrDefault of de null-coalescing-operator ??.
int? rating = null;
int result1 = rating.GetValueOrDefault(); // 0 (default for int)
int result2 = rating.GetValueOrDefault(-1); // -1 (specified fallback)
Console.WriteLine(result1); // 0
Console.WriteLine(result2); // -1
rating = 5;
int result3 = rating.GetValueOrDefault(-1); // 5 (actual value)
Console.WriteLine(result3); // 5
De ?? operator is inline vaak netter.
int? priority = null;
int effective = priority ?? 0; // 0 because priority is null
Console.WriteLine(effective); // 0
priority = 3;
effective = priority ?? 0; // 3 because priority has a value
Console.WriteLine(effective); // 3
Beide benaderingen retourneren de werkelijke waarde wanneer deze aanwezig is en de door u opgegeven terugvalwaarde wanneer dit niet het geval is.
Rekenkunde met null-leefbare waardetypes
Rekenkundige en vergelijkingsoperatoren voor null-waardetypen worden opgeheven: wanneer een van beide operanden is null, is null het resultaat in plaats van een fout.
int? a = 10;
int? b = 20;
int? c = null;
int? sum = a + b; // both non-null: result is 30
int? product = a * c; // one operand is null: result is null
Console.WriteLine(sum); // 30
Console.WriteLine(product.HasValue); // False — null propagates through arithmetic
Null wordt standaard doorgegeven via rekenkundige bewerkingen. Als u wilt voorkomen dat een null-resultaat verder trapsgewijs wordt weergegeven, extraheert u de waarde met ?? of GetValueOrDefault voordat u deze in een berekening gebruikt.