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.
De operator ?? null-coalescing retourneert de waarde van de linkeroperand als dat niet nullhet is. Anders wordt de rechteroperand geëvalueerd en wordt het resultaat ervan geretourneerd. De ??-operator evalueert de rechteroperand niet als de linkeroperand niet-null is. De null-coalescing toewijzingsoperator ??= wijst de waarde van zijn rechteroperand toe aan zijn linkeroperand alleen als de linkeroperand null is. De ??=-operator evalueert de rechteroperand niet als de linkeroperand niet-null is.
List<int>? numbers = null;
int? a = null;
Console.WriteLine((numbers is null)); // expected: true
// if numbers is null, initialize it. Then, add 5 to numbers
(numbers ??= new List<int>()).Add(5);
Console.WriteLine(string.Join(" ", numbers)); // output: 5
Console.WriteLine((numbers is null)); // expected: false
Console.WriteLine((a is null)); // expected: true
Console.WriteLine((a ?? 3)); // expected: 3 since a is still null
// if a is null then assign 0 to a and add a to the list
numbers.Add(a ??= 0);
Console.WriteLine((a is null)); // expected: false
Console.WriteLine(string.Join(" ", numbers)); // output: 5 0
Console.WriteLine(a); // output: 0
De linkeroperand van de ??= operator moet een variabele, een eigenschap of een indexeerelement zijn.
De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.
De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.
Aanbeveling
Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.
Het type van de linkeroperand van de ?? en ??= operators kan geen niet-null-waardetype zijn. U kunt vooral de null-coalescing operators gebruiken met onbeperkte typeparameters.
private static void Display<T>(T a, T backup)
{
Console.WriteLine(a ?? backup);
}
De operatoren voor null-coalescing zijn juist associatief. Dat wil zeggen, uitdrukkingen van de vorm
a ?? b ?? c
d ??= e ??= f
worden geëvalueerd als
a ?? (b ?? c)
d ??= (e ??= f)
Voorbeelden
De ?? en ??= operators zijn handig in de volgende scenario's:
In expressies die gebruikmaken van de null-voorwaardelijke operatoren
?.en?[]gebruikt u de??operator om een alternatieve expressie te bieden om te evalueren of het resultaat van de expressie met null-voorwaardelijke bewerkingen isnull:double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum) { return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN; } var sum = SumNumbers(null, 0); Console.WriteLine(sum); // output: NaNWanneer u met null-waardetypen werkt en een waarde van een onderliggend waardetype moet opgeven, gebruikt u de
??operator om de waarde op te geven die moet worden opgegeven als een waarde voor null-waarden isnull:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1Gebruik de Nullable<T>.GetValueOrDefault() methode als de waarde die moet worden gebruikt wanneer een waarde voor een null-type de standaardwaarde van het onderliggende waardetype is
null.Als u de code voor argumentcontrole beknopter wilt maken, gebruikt u een
throwexpressie als de rechteroperand van de??operator:public string Name { get => name; set => name = value ?? throw new ArgumentNullException(nameof(value), "Name cannot be null"); }In het voorgaande voorbeeld wordt ook gedemonstreerd hoe expression-bodied members gebruikt worden om een eigenschap te definiëren.
Gebruik de
??=operator om code van het volgende formulier te vervangen:if (variable is null) { variable = expression; }Gebruik de volgende code:
variable ??= expression;
Overbelasting van operatoren
U kunt de ?? en ??= operators niet overbelasten.
C#-taalspecificatie
Zie de ?? sectie Null coalescing operator van de C#-taalspecificatie voor meer informatie over de operator.
Zie de sectie ??= van de C#-taalspecificatie voor meer informatie over de operator.