Bonjour ! Je viens de commencer à apprendre C# et je suis tombé sur une syntaxe étrange. Dans du code écrit par quelqu'un d'autre, j'ai vu cette construction :
```csharp
string name = userName ?? "Invité";
```
Que font ces deux points d'interrogation `??` ici ? Je comprends que `userName` est une variable, mais pourquoi mettre deux points d'interrogation puis une chaîne ? Est-ce une sorte de vérification ? J'ai essayé de chercher sur Google, mais je trouve surtout des explications sur l'opérateur ternaire `? :`, alors que ça a l'air différent.
J'ai aussi remarqué qu'on écrit parfois `??=` — est-ce lié ? Par exemple, dans ce code :
```csharp
list ??= new List
();
```
Pouvez-vous m'expliquer simplement comment ça fonctionne et à quoi ça sert ? Avec des exemples si possible, parce que je suis visuel. Merci d'avance !
<<>>
Opérateur de coalescence null (??) en C#
Deux points d'interrogation ?? en C# sont le null-coalescing operator (opérateur de coalescence null). Il est utilisé pour vérifier si une valeur est null et, si c'est le cas, fournir une valeur par défaut. Par exemple :
```csharp
string name = userName ?? "Invité";
```
Cela signifie : si `userName` n'est pas null, alors `name` prend la valeur de `userName` ; sinon, `name` prend la valeur "Invité". C'est une manière concise d'éviter une vérification explicite avec `if`.
Quant à ??=, c'est l'opérateur d'assignation de coalescence null (null-coalescing assignment operator), introduit en C# 8.0. Il assigne une valeur à une variable seulement si celle-ci est null. Par exemple :
```csharp
list ??= new List();
```
Cela équivaut à :
```csharp
if (list == null)
{
list = new List();
}
```
Ces opérateurs sont très utiles pour simplifier le code et éviter les erreurs liées aux références null.