Que signifient deux points d'interrogation ensemble en C# ?

Que signifient deux points d’interrogation ensemble en C# ?

C’est l’operateur de coalescence nulle, et assez similaire a l’operateur ternaire (if immediat). Voir aussi Operateur ?? - MSDN.

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

se developpe en :

FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();

qui se developpe davantage en :

if(formsAuth != null)
    FormsAuth = formsAuth;
else
    FormsAuth = new FormsAuthenticationWrapper();

En francais, cela signifie “Si ce qui est a gauche n’est pas null, utilisez cela, sinon utilisez ce qui est a droite.”

Notez que vous pouvez en enchainer autant que vous le souhaitez. L’instruction suivante affectera la premiere Answer# non nulle a Answer (si toutes les reponses sont nulles, alors Answer est null) :

string Answer = Answer1 ?? Answer2 ?? Answer3 ?? Answer4;

Il convient egalement de mentionner que si le developpement ci-dessus est conceptuellement equivalent, le resultat de chaque expression n’est evalue qu’une seule fois. C’est important si, par exemple, une expression est un appel de methode avec des effets de bord. (Merci a @Joey pour l’avoir souligne.)