1559 votes

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

Je suis tombé sur cette ligne de code :

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

Que signifient les deux points d'interrogation, est-ce une sorte d'opérateur ternaire ? C'est difficile à trouver sur Google.

2071voto

lc. Points 50297

Il s'agit de l'opérateur de coalescence des nuls, qui ressemble beaucoup à l'opérateur ternaire (immédiatement si). Voir aussi ? ? Opérateur - MSDN .

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

s'étend à :

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

qui s'étend ensuite à :

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

En anglais, cela signifie "Si ce qui est à gauche n'est pas nul, utilisez-le, sinon utilisez ce qui est à droite".

Notez que vous pouvez utiliser n'importe quel nombre de ces éléments dans l'ordre. L'instruction suivante attribue la première valeur non nulle à la variable Answer# à Answer :

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

276voto

Jon Skeet Points 692016

Ce n'est pas parce que personne d'autre n'a encore prononcé les mots magiques : c'est la opérateur de coalescence nul . Il est défini dans la section 7.12 de la Spécification du langage C# 3.0 .

C'est très pratique, notamment en raison de son associativité. Une expression de la forme :

a ?? b ?? c ?? d

donnera le résultat de l'expression 'a' si elle n'est pas nulle, sinon essayez 'b', sinon essayez 'c', sinon essayez 'd'. Il y a un court-circuit en tout point.

De même, si le type de 'd' est non nul, le type de l'expression entière est également non nul.

69voto

Iain Holder Points 7930

C'est l'opérateur de coalescence des nuls.

http://msdn.microsoft.com/en-us/library/ms173224.aspx

Oui, presque impossible à rechercher si on ne sait pas comment ça s'appelle ! :-)

EDIT : Et voici une fonctionnalité intéressante d'une autre question. Vous pouvez les enchaîner.

http://stackoverflow.com/questions/9033/hidden-features-of-c#15765

27voto

Edward Tanguay Points 43219

Merci à tous, voici l'explication la plus succincte que j'ai trouvée sur le site MSDN :

// y = x, unless x is null, in which case y = -1.
int y = x ?? -1;

21voto

RedFilter Points 84190

?? est là pour fournir une valeur pour un type nullable lorsque la valeur est nulle. Ainsi, si formsAuth est null, il renverra new FormsAuthenticationWrapper().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X