Anteckning
Å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.
Den null-koalescerande operatorn ??
returnerar värdet för dess vänstra operand om det inte är null
. Annars utvärderas den högra operanden och dess resultat returneras. Operatorn ??
utvärderar inte sin högra operand om den vänstra operanden utvärderas till ett icke-nullvärde. Null-coalescing tilldelningsoperatorn ??=
tilldelar endast värdet av sin högra operand till sin vänstra operand om den vänstra operandens värde är null
. Operatorn ??=
utvärderar inte sin högra operand om den vänstra operanden utvärderas till ett icke-nullvärde.
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
Operatorns ??=
vänstra operande måste vara en variabel, en egenskap eller ett indexerarelement .
Typen av den vänstra operanden för operatorerna ??
och ??=
kan inte vara en värdetyp som inte kan nulleras. Du kan använda nollkoalesceringoperatorerna med ogränsade typparametrar i synnerhet.
private static void Display<T>(T a, T backup)
{
Console.WriteLine(a ?? backup);
}
Null-coalescing-operatorerna är högerassociativa. Det vill säga, uttryck av formen
a ?? b ?? c
d ??= e ??= f
utvärderas som
a ?? (b ?? c)
d ??= (e ??= f)
Exempel
Operatorerna ??
och ??=
kan vara användbara i följande scenarier:
I uttryck med null-villkorsoperatorer
?.
och?[]
kan du använda operatorn??
för att ange ett alternativt uttryck för att utvärdera om resultatet av uttrycket med null-villkorsstyrda åtgärder ärnull
:double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum) { return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN; } var sum = SumNumbers(null, 0); Console.WriteLine(sum); // output: NaN
När du arbetar med null-värdetyper och behöver ange ett värde av en underliggande värdetyp använder du operatorn
??
för att ange det värde som ska anges om ett värde av typen null ärnull
:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1
Nullable<T>.GetValueOrDefault() Använd metoden om det värde som ska användas när ett värde av typen null ska
null
vara standardvärdet för den underliggande värdetypen.Du kan använda ett
throw
uttryck som operatorns högra operand??
för att göra argumentkontrollkoden mer koncis:public string Name { get => name; set => name = value ?? throw new ArgumentNullException(nameof(value), "Name cannot be null"); }
Föregående exempel visar också hur du använder uttrycksbaserade medlemmar för att definiera en egenskap.
Du kan använda operatorn
??=
för att ersätta koden i formuläretif (variable is null) { variable = expression; }
med följande kod:
variable ??= expression;
Möjlighet till operatoröverbelastning
Operatorerna ??
och ??=
kan inte överbelastas.
Språkspecifikation för C#
Mer information om operatorn finns i ??
avsnittet null coalescing operator i språkspecifikationen C#.
Mer information om operatorn ??=
finns i kommentaren om funktionsförslaget.