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 al ten minste één programmeertaal kennen en C# leren. Als u nieuw bent met programmeren, begint u eerst met de Aan de slag-tutorials.
Afkomstig van Java of C++? C# biedt compileertijd null-veiligheid door middel van nullable referentietypen. Het doel is vergelijkbaar met Java @NonNull aantekeningen, maar afgedwongen door de compiler. C# heeft ook speciale operators zoals ?. en ?? die null-veilige expressies beknopt maken.
null geeft de afwezigheid van een waarde aan. Wanneer u toegang probeert te krijgen tot een lid op basis van een null verwijzing, door een methode aan te roepen of een eigenschap te lezen, genereert de runtime een NullReferenceException:
// Accessing a member on null throws NullReferenceException at runtime:
// string? name = null;
// int length = name.Length; // throws NullReferenceException
// Check before you dereference:
string? name = null;
if (name is not null)
{
Console.WriteLine($"Name has {name.Length} characters.");
}
else
{
Console.WriteLine("Name has no value.");
}
// Output: Name has no value.
C# biedt u drie aanvullende hulpprogramma's voor het schrijven van null-veilige code:
-
Nullable typen: laat een waardetype zoals
intofboolooknullbevatten. - <:c0>Nullable referentietypen: de compiler bijhouden of een referentie null kan zijn
- Null-operators: snelle, veilige toegang en terugvallogica beknopt
Typen null-waarden
Waardetypen zoals int, doubleen bool kunnen niet standaard worden opgeslagen null . Voeg ? toe aan de naam van het type om een nulbare waardetype te maken dat een waarde bevat of null:
int? score = null;
Console.WriteLine(score.HasValue); // False
score = 95;
Console.WriteLine(score.HasValue); // True
Console.WriteLine(score.GetValueOrDefault()); // 95
int? missing = null;
Console.WriteLine(missing.GetValueOrDefault(-1)); // -1
Null-waardetypen zijn handig wanneer een onderliggend waardetype 'geen gegevens' moet weergeven. Veelvoorkomende scenario's zijn databasekolommen die mogelijk afwezig zijn, optionele configuratie-instellingen en sensormetingen die nog niet zijn vastgelegd.
Zie Nullable value types voor volledige dekking van declaratie, controle en conversie.
Nullable referentietypen
Referentietypen, zoals string-arrays en klasse-exemplaren, kunnen null bevatten tijdens runtime.
Nullable-referentietypen is een compilerfunctie die null-intentie expliciet maakt en fouten onderschept tijdens compilatietijd.
Met behulp van de ? aantekening declareert u uw intentie:
-
string?— deze verwijzing kan zijnnull; de compiler waarschuwt als u deze deducteert zonder eerst te controleren -
string— deze verwijzing mag niet zijnnull; de compiler waarschuwt als u eraan toewijstnull
// string? means this reference might be null
// string means this reference should not be null
string? nullableName = null;
string nonNullName = "Alice";
// ?. safely accesses a member when the reference might be null
string display = nullableName?.ToUpper() ?? "(no name)";
Console.WriteLine(display); // (no name)
display = nonNullName.ToUpper(); // safe: nonNullName is never null
Console.WriteLine(display); // ALICE
Alle .NET projecten die moderne SDK-sjablonen maken, maken standaard null-referentietypen mogelijk. Zie Nullable-referentietypen voor volledige richtlijnen voor het inschakelen en toevoegen van aantekeningen.
Nulloperators
C# bevat verschillende operators waarmee u overal null-veilige code kunt schrijven zonder handmatige if-null-beveiligingen:
| Operator | Name | Purpose |
|---|---|---|
?. |
Null-voorwaardelijke leden toegang | Alleen toegang krijgen tot een lid als het object niet null is |
?[] |
Toegang tot null-voorwaardelijke indexeerfunctie | Alleen toegang krijgen tot een element wanneer de verzameling niet null is |
?? |
null-samenvoeging | Een terugvalwaarde retourneren wanneer de expressie is null |
??= |
Null-samenvoegende toewijzing | Alleen toewijzen wanneer de variabele is null |
is null / is not null |
Null-patroon | Voorkeurs-null-test |
string? city = GetCity();
// ?. — access a member only when non-null
int? len = city?.Length;
// ?? — substitute a default when null
string display = city ?? "unknown";
// is null — preferred null test
if (city is null)
{
Console.WriteLine("No city provided.");
}
else
{
Console.WriteLine($"{display} ({len} chars)");
}
// Output: No city provided.
Zie Null-operators voor gedetailleerde voorbeelden van elke operator.
Nullable waardetypes en nullable referentietypes dienen verschillende doelen.
Nullable value types en nullable reference types zijn geen alternatieven. Ze lossen verschillende problemen op:
- Gebruiken
T?voor een waardetype dat 'geen waarde' moet vertegenwoordigen. Gebruik bijvoorbeeldint?voor een optionele databasekolom ofDateTime?voor een gebeurtenis die nog niet is gepland. - Gebruik
string?en andere nullable referentieannotaties om te documenteren dat een referentie mogelijknullis, zodat de compiler u kan waarschuwen voordat er eenNullReferenceException-fout optreedt tijdens runtime.
Samen bieden deze functies en de null-operators u een volledige set hulpprogramma's voor het schrijven van null-veilige C#-code.