Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Tips/Råd
Den här artikeln är en del av avsnittet Grunderna för utvecklare som redan känner till minst ett programmeringsspråk och lär sig C#. Om du inte har använt programmering tidigare börjar du med självstudierna Komma igång först.
Kommer du från Java eller C++? C# ger kompileringstid null-säkerhet via null-referenstyper. Målet liknar Java @NonNull anteckningar men framtvingas av kompilatorn. C# har också dedikerade operatorer som ?. och ?? som gör null-säkra uttryck koncisa.
null representerar avsaknaden av ett värde. När du försöker komma åt en medlem på en null referens, genom att anropa en metod eller läsa en egenskap, genererar körningen en 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# ger dig tre kompletterande verktyg för att skriva null-säker kod:
-
Typer av null-värden: låt en värdetyp som
intellerbooläven innehållanull -
Nullbara referenstyper: låt kompilatorn spåra om en referens kan vara
null - Null-operatorer: uttrycka null-säker åtkomst och fallback-logik koncist
Typer av null-värden
Värdetyper som int, doubleoch bool kan inte innehålla null som standard. Lägg till ? i typnamnet för att skapa en nullbar värdetyp som innehåller antingen ett värde eller 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
Typer av null-värden är användbara när en underliggande värdetyp behöver representera "inga data". Vanliga scenarier är databaskolumner som kanske saknas, valfria konfigurationsinställningar och sensoravläsningar som inte har avbildats ännu.
Fullständig täckning av deklaration, kontroll och konvertering finns i Nullable value types.
Referenstyper som kan ogiltigförklaras
Referenstyper, till exempel string, matriser och klassinstanser, kan innehålla null vid körning.
Nullbara referenstyper är en kompilatorfunktion som gör null-avsikten explicit och fångar upp misstag vid kompileringstillfället.
Genom att använda anteckningen ? deklarerar du din avsikt:
-
string?— Den här referensen kan varanull; kompilatorn varnar om du avreferera den utan att först kontrollera -
string— Den här referensen bör inte varanull. Kompilatorn varnar om du tilldelarnullden
// 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
Alla .NET projekt som moderna SDK-mallar skapar aktiverar nullbara referenstyper som standard. Fullständig vägledning om hur du aktiverar och kommenterar finns i Referenstyper som kan ogiltigförklaras.
Null-operatorer
C# innehåller flera operatorer som gör att du kan skriva null-säker kod utan manuella if-null-skydd överallt:
| Operator | Name | Purpose |
|---|---|---|
?. |
Null-villkorlig åtkomst av medlem | Få endast åtkomst till en medlem när objektet inte är null |
?[] |
Åtkomst till null-villkorsstyrd indexerare | Få endast åtkomst till ett element när samlingen inte är null |
?? |
nullsammanslagning | Returnera ett återställningsvärde när uttrycket är null |
??= |
Null-sammankopplingstilldelning | Tilldela endast när variabeln är null |
is null / is not null |
Null-mönster | Föredraget nulltest |
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.
Detaljerade exempel på varje operator finns i Null-operatorer.
Nullbara värdetyper och nullbara referenstyper har olika syften
Ogiltiga värdetyper och nullbara referenstyper är inte alternativ. De löser olika problem:
- Använd
T?för en värdetyp som måste representera "inget värde". Du kan till exempel användaint?för en valfri databaskolumn ellerDateTime?för en händelse som inte har schemalagts ännu. - Använd
string?och andra nullbara referensanteckningar för att dokumentera att en referens kan varanull, så att kompilatorn kan varna dig innan enNullReferenceExceptioninträffar under körning.
Tillsammans ger dessa funktioner och null-operatorerna en fullständig uppsättning verktyg för att skriva null-säker C#-kod.