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 null-coalescing operator ??
retourneert de waarde van de linkeroperand als de linkeroperand niet null
is; anderszins wordt de rechteroperand geëvalueerd en het resultaat daarvan 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.
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 kunnen handig zijn in de volgende scenario's:
In expressies met de null-voorwaardelijke operatoren
?.
en?[]
kunt u de??
operator gebruiken om een alternatieve expressie te bieden voor het geval 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: NaN
Wanneer 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 voor het geval een null-waarde isnull
:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1
Gebruik de Nullable<T>.GetValueOrDefault() methode als de waarde van het type nullable
null
de standaardwaarde van het onderliggende waardetype moet zijn.U kunt een
throw
expressie gebruiken als de rechteroperand van de??
operator om de code voor argumentcontrole beknopter te maken: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.
U kunt de
??=
operator gebruiken om de code van het formulier te vervangenif (variable is null) { variable = expression; }
met de volgende code:
variable ??= expression;
Overbelasting van operatoren
De operators ??
en ??=
kunnen niet worden overbelast.
C#-taalspecificatie
Zie de ??
sectie Null coalescing operator van de C#-taalspecificatie voor meer informatie over de operator.
Zie de ??=
voor meer informatie over de operator.