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.
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.
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;
@CodeBlend, ce n'est pas dangereux. Si tu développais, tu aurais juste une série d'instructions if/else imbriquées. La syntaxe est juste étrange parce que vous n'avez pas l'habitude de la voir.
@jm2 Tant que vous vérifiez ce que vous faites, par exemple si vous voulez avoir des ifs séparés et non imbriqués, ce ne serait pas approprié. (Lire ceci m'a vraiment montré un exemple décent (ish) de la façon dont il peut être utilisé)[ rlacovara.blogspot.com/2009/07/
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.
J'aime comment vous avez simplifié sa signification à "opérateur de coalescence nul". C'est tout ce dont j'avais besoin.
Tangentiel mais lié : C'est maintenant dans Swift, mais c'est très différent : "Nil Coalescing Operator". developer.apple.com/library/ios/documentation/Swift/Conceptual/
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
Cela laisse entrevoir un aspect important de l'opérateur ? ? : il a été introduit pour aider à travailler avec des types nuls. Dans votre exemple, "x" est de type "int ? (Nullable<int>).
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.
66 votes
C'est définitivement pas un opérateur ternaire - il n'a que deux opérandes ! Il est un peu comme l'opérateur conditionnel (qui est ternaire) mais l'opérateur de coalescence nul est un opérateur binaire.
101 votes
Je l'ai expliqué lors d'un entretien où l'employeur potentiel avait auparavant exprimé des doutes quant à mes compétences en C#, car j'utilisais Java de manière professionnelle depuis un certain temps déjà. Ils n'en avaient jamais entendu parler avant, et n'ont pas remis en question ma connaissance du C# par la suite :)
85 votes
Il n'y a pas eu d'échec aussi épique dans la reconnaissance des compétences depuis le gars qui a refusé les Beatles :-) A partir de maintenant, envoyez-leur une copie de votre livre avec un lien url vers votre profil SO écrit sur la couverture intérieure.
6 votes
IainMH : Pour ce que ça vaut, je n'avais pas tout à fait pas encore commencé à écrire le livre. (Ou peut-être que je ne travaillais que sur le chapitre 1 - quelque chose comme ça.) Il est vrai qu'une recherche sur moi aurait rapidement trouvé mon blog, mes articles, etc.
8 votes
Re : dernière phrase de la question - pour référence future, SymbolHound est excellent pour ce genre de choses, par ex. symbolhound.com/?q=%3F%3F&l=&e=&n=&u= (pour ceux qui se méfient - je ne suis affilié d'aucune façon, j'aime juste un bon outil quand j'en trouve un...)
5 votes
A la recherche de
C# ??
|C# '??'
|C# "??"
ne donne pas les résultats escomptés. Le moteur de recherche teste-t-il si le C# est nul, et dit-il, Non - C'est en faitC#
- Voici vos résultats pourC#
- Doh !4 votes
@ppumkin Il suffit de chercher
double question mark c#
dans Google.