Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
L’opérateur ?? de fusion null retourne la valeur de son opérande de gauche si ce n’est pas nullle cas. Dans le cas contraire, il évalue l’opérande droit et retourne son résultat. L’opérateur ?? n’évalue pas son opérande droit si l’opérande gauche a la valeur non Null. L’opérateur de coalescence nulle ??= assigne la valeur de son opérande droit à son opérande gauche uniquement si l’opérande gauche a la valeur null. L’opérateur ??= n’évalue pas son opérande droit si l’opérande gauche a la valeur non Null.
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
L’opérande de gauche de l’opérateur ??= doit être une variable, une propriété ou un élément d’indexeur .
La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.
La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.
Conseil / Astuce
Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.
Le type de l’opérande du côté gauche des opérateurs ?? et ??= ne peut pas être un type valeur non nullable. En particulier, vous pouvez utiliser les opérateurs de coalescence nulle avec des paramètres de type non contraints :
private static void Display<T>(T a, T backup)
{
Console.WriteLine(a ?? backup);
}
Les opérateurs de coalescence nulle sont associatifs de droite. Autrement dit, les expressions du formulaire
a ?? b ?? c
d ??= e ??= f
sont évalués en tant que
a ?? (b ?? c)
d ??= (e ??= f)
Exemples
Les ?? opérateurs et ??= les opérateurs sont utiles dans les scénarios suivants :
Dans les expressions qui utilisent les opérateurs conditionnels
?.Null et?[], utilisez l’opérateur??pour fournir une autre expression pour évaluer si le résultat de l’expression avec des opérations conditionnelles Null estnull:double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum) { return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN; } var sum = SumNumbers(null, 0); Console.WriteLine(sum); // output: NaNLorsque vous utilisez des types valeur nullables et que vous devez fournir une valeur d’un type valeur sous-jacent, utilisez l’opérateur
??pour spécifier la valeur à fournir si une valeur de type nullable estnull:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1Utilisez la Nullable<T>.GetValueOrDefault() méthode si la valeur à utiliser lorsqu’une valeur de type Nullable doit
nullêtre la valeur par défaut du type valeur sous-jacente.Pour rendre le code de vérification des arguments plus concis, utilisez une
throwexpression comme opérande de droite de l’opérateur??:public string Name { get => name; set => name = value ?? throw new ArgumentNullException(nameof(value), "Name cannot be null"); }L’exemple précédent montre également comment utiliser des membres à corps d'expression pour définir une propriété.
Utilisez l’opérateur pour remplacer le
??=code du formulaire suivant :if (variable is null) { variable = expression; }Utilisez le code suivant :
variable ??= expression;
Surcharge des opérateurs
Vous ne pouvez pas surcharger les opérateurs et ??= les ?? opérateurs.
Spécification du langage C#
Pour plus d’informations sur l’opérateur ?? , consultez la section Opérateur de fusion Null de la spécification du langage C#.
Pour plus d’informations sur l’opérateur ??= , consultez la section Affectation composée de la spécification du langage C#.