Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Operátor ?? nulového sjednocení vrátí hodnotu jeho levého operandu, pokud není null. V opačném případě vyhodnocuje pravý operand a vrátí výsledek. Operátor ?? nevyhodnocuje svůj pravý operand, pokud se levý operand vyhodnotí jako nenulový. Operátor přiřazení s nulovým sloučením ??= přiřazuje hodnotu pravého operandu levému operandu pouze pokud levý operand má hodnotu null. Operátor ??= nevyhodnocuje svůj pravý operand, pokud se levý operand vyhodnotí jako nenulový.
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
Levý operand operátoru ??= musí být proměnná, vlastnost, nebo prvek indexeru.
Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.
Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.
Návod
Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.
Typ levého operandu ?? a ??= operátorů nemůže být nenulový typ hodnoty. Konkrétně můžete použít null-coalescing operátory s neomezenými parametry typu:
private static void Display<T>(T a, T backup)
{
Console.WriteLine(a ?? backup);
}
Operátory nulového slučování jsou pravé asociativní. To znamená výrazy ve formě.
a ?? b ?? c
d ??= e ??= f
se vyhodnocují jako
a ?? (b ?? c)
d ??= (e ??= f)
Příklady
Operátory ?? a ??= operátory jsou užitečné v následujících scénářích:
Ve výrazech, které používají podmíněné operátory
?.s hodnotou null, a?[]pomocí operátoru??poskytněte alternativní výraz k vyhodnocení, pokud jenullvýsledek výrazu s podmíněnými operacemi s hodnotou null:double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum) { return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN; } var sum = SumNumbers(null, 0); Console.WriteLine(sum); // output: NaNPři práci s typy hodnot s možnou hodnotou null a potřebujete zadat hodnotu základního typu hodnoty, pomocí
??operátoru zadejte hodnotu, která má být zadána, pokud jenullhodnota typu s možnou hodnotou null:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1Použijte metodu Nullable<T>.GetValueOrDefault() , pokud hodnota, která se má použít, když je
nullhodnota typu null by měla být výchozí hodnota základního typu hodnoty.Pokud chcete, aby byl kód pro kontrolu argumentů výstižnější, použijte
throwvýraz jako operand operátoru??na pravé straně:public string Name { get => name; set => name = value ?? throw new ArgumentNullException(nameof(value), "Name cannot be null"); }Předchozí příklad také ukazuje, jak použít členy těl výrazu pro definici vlastnosti.
Pomocí operátoru
??=nahraďte kód následujícího formuláře:if (variable is null) { variable = expression; }Použijte následující kód:
variable ??= expression;
Přetížení operátoru
Operátory a ??= operátory ?? nemůžete přetížit.
Specifikace jazyka C#
Další informace o operátoru ?? naleznete v části operátoru nulového sjednoceníspecifikace jazyka C#.
Další informace o operátoru ??= naleznete v části Složené přiřazení specifikace jazyka C#.