9

Old WayComment utiliser l'opérateur nullable avec l'opérateur conditionnel nul?

int? myFavoriteNumber = 42; 
int total = 0; 
if (myfavoriteNumber.HasValue) 
    total += myFavoriteNumber.Value *2; 

de façon nouvelle?

int? myFavoriteNumber = 42; 
total += myFavoriteNumber?.Value *2; //fails 
+2

Quel est le problème avec 'int total = (myfavoriteNumber.HasValue)? myFavoriteNumber.Value * 2: 0; '? Encore une ligne, et plus lisible que votre "nouvelle façon" suggérée –

+0

@ ShadowWizard Je suppose qu'il pourrait vouloir utiliser cette fonction plusieurs fois d'où l'utilisation de + = afin qu'il puisse garder un total en cours d'exécution? Je suis juste en train de deviner. J'ai toujours aimé votre commentaire car je suis d'accord avec vous. –

+0

@PrimeByDesign Je voudrais aller avec '??', comme dans [this] (https://stackoverflow.com/a/35970536/111794) réponse. –

Répondre

4

L'opérateur de propagation de zéro? Comme il le dit, propage la valeur nulle. Dans le cas de int? .Value cela n'est pas possible puisque le type de Value, int, ne peut pas être nul (si c'était possible, l'opération deviendrait null * 2, qu'est-ce que cela signifierait?). Ainsi, la «vieille manière» est toujours la manière actuelle de faire ceci.

+0

_ Qu'est-ce que cela voudrait dire? _ Juste à part, généralement tout nombre multiplié par NULL renvoie NULL. C'est ainsi que fonctionne le SQL normal, par exemple. NULL signifie souvent "Je ne connais pas la valeur". Imaginez cet exemple: je multiplie 5 pommes pour NULL $ par pomme. Je ne sais donc pas le prix d'une pomme. La conséquence est que je ne peux pas connaître le coût total, donc le résultat est NULL. –

3

Essayez ceci:

int? myFavoriteNumber = 42; 
total += (myFavoriteNumber??0) *2; 

L'expression (myFavoriteNumber?? 0) renvoie 0 en cas de myFavoriteNumber est nulle.

3

Je pense que vous avez mal compris l'utilisation de null opérateur conditionnel. Il est utilisé pour court-circuiter une chaîne de si à null, lorsque l'une des étapes donne null.

comme ceci:

userCompanyName = user?.Company?.Name; 

S'il vous plaît noter que userCompanyName contiendra null si user ou user.Company est null. Dans votre exemple total ne peut pas accepter null, donc c'est plus sur l'utilisation de ?? que toute autre chose:

total = (myFavoriteNumber ?? 0) * 2; 
0

Essayez cette

int? myFavoriteNumber = 42; 
total += (myFavoriteNumber.Value!=null)? myFavoriteNumber.Value*2 : 0;