Deux points d'interrogation en C# : ce que c'est et comment les utiliser

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Deux points d'interrogation en C# : pas une erreur, mais un outil puissant

\n\n

Imaginez : vous écrivez du code en C#, et soudain vous voyez la construction ??. La première pensée — une faute de frappe ? Un signe en trop ? En réalité, c'est l'un des opérateurs les plus élégants et utiles du langage — l'opérateur de coalescence nulle (null-coalescing operator). Si vous avez déjà attrapé une NullReferenceException et maudit tout ce qui existe — cet opérateur deviendra votre bouée de sauvetage.

\n\n

Dans cet article, nous allons voir ce que signifient deux points d'interrogation en C#, comment les utiliser correctement, en quoi ils diffèrent de l'opérateur ternaire, et montrer des exemples concrets de la pratique. C'est parti !

\n\n

Qu'est-ce que l'opérateur ?? en C# ?

\n\n

L'opérateur ?? (deux points d'interrogation) est un opérateur binaire qui retourne l'opérande de gauche s'il n'est pas égal à null ; sinon, il retourne l'opérande de droite. En termes simples : « Si la gauche n'est pas null — prends la gauche, sinon prends la droite ».

\n\n

La syntaxe est extrêmement simple :

\n\n
var result = left ?? right;
\n\n

Où :

\n
    \n
  • left — la valeur qui peut être null ;
  • \n
  • right — la valeur par défaut (ne peut pas être null si le type à droite est nullable).
  • \n
\n\n

Premier exemple : se sauver de null

\n\n

Supposons que vous ayez une variable string? name (chaîne nullable). Vous voulez afficher le nom de l'utilisateur, et s'il n'y en a pas — « Invité » :

\n\n
string? name = GetUserName(); // peut retourner null\nstring displayName = name ?? "Invité";\nConsole.WriteLine(displayName);
\n\n

Sans l'opérateur ??, vous devriez écrire :

\n\n
string displayName = (name != null) ? name : "Invité";
\n\n

Reconnaissez que la première option se lit comme une phrase normale : « nom ou invité ». Joli, non ?

\n\n

L'opérateur ??= : la nouvelle génération de la coalescence nulle

\n\n

À partir de C# 8.0, l'opérateur ??= est apparu — c'est une forme abrégée d'affectation avec coalescence nulle. Il affecte la valeur de l'opérande de droite à l'opérande de gauche, uniquement si l'opérande de gauche est égal à null.

\n\n

Syntaxe :

\n\n
left ??= right;
\n\n

Cela équivaut à :

\n\n
if (left == null) left = right;
\n\n

Exemple avec ??=

\n\n
List<int>? numbers = null;\nnumbers ??= new List<int>(); // numbers est maintenant = new List<int>()\nnumbers.Add(42);\nConsole.WriteLine(numbers.Count); // 1
\n\n

Notez : si numbers avait déjà été initialisé (non null), l'affectation n'aurait pas eu lieu. C'est idéal pour l'initialisation paresseuse.

\n\n

Comparaison avec l'opérateur ternaire (? :)

\n\n

Beaucoup de débutants confondent ?? avec l'opérateur ternaire ? :. Clarifions une fois pour toutes :

\n\n
    \n
  • L'opérateur ternaire est une forme abrégée de if-else. Il vérifie N'IMPORTE QUELLE condition booléenne : condition ? valeur_si_vrai : valeur_si_faux.
  • \n
  • L'opérateur ?? vérifie UNIQUEMENT la nullité. C'est un cas particulier, optimisé pour une seule tâche.
  • \n
\n\n

Exemple d'opérateur ternaire :

\n\n
int age = 18;\nstring status = (age >= 18) ? "Adulte" : "Mineur";
\n\n

Et voici ce qui se passe si on essaie de remplacer ?? par un ternaire :

\n\n
string? name = null;\nstring displayName = name != null ? name : "Invité"; // fonctionne, mais plus long\nstring displayName2 = name ?? "Invité"; // plus court et plus clair
\n\n

Conclusion : utilisez ?? quand vous avez simplement besoin de substituer une valeur par défaut à la place de null. Pour toutes les autres conditions — l'opérateur ternaire.

\n\n

Chaînage de l'opérateur ??

\n\n

Vous pouvez enchaîner plusieurs opérateurs ??. C'est pratique lorsqu'il y a plusieurs sources possibles de valeur :

\n\n
string? firstChoice = GetFromCache                

Blogs

Book Recommendations