10
votes

Utilisation de retour et de courte main si dans C #

Pourquoi la ligne de code suivante ne fonctionnerait-elle pas dans une méthode?

bool ret = false;
if(count > 0)
    ret = true;
return ret;


4 commentaires

Je suppose qu'il n'y a pas d'erreur de temps compilée, juste que la méthode renvoie la mauvaise valeur?


C'était une erreur de temps de compilation ... Il y avait une erreur dans ma syntaxe.


Ce qui arrive fréquemment dans le cas de l'opérateur tertiaire, c'est que l'évaluation du premier résultat (Nombre> 0) détermine la valeur de retour que la fonction utilisera. Je suppose que votre fonction renvoie Bool?
Je voudrais essayer de déterminer la valeur du (comptage> 0). Si c'est le problème, vous devrez peut-être avoir à étudier la déclaration entière:
retour (BOOL) (((nombre> 0)? True: Faux); C'est une bizarrerie que j'ai vue dans d'autres endroits.


En outre, la question de bonus, ils devraient compiler exactement à la même chose (comme la 3ème variante: bool re; if (comptez> 0) {ret = true;} else} else} else = faux} retoursert; Mais, j'ai toujours pensé que l'opérateur tertiaire a montré un grok plus complet de la langue «C» :)


4 Réponses :


44
votes

Je recommanderais: xxx

Il n'y a pas besoin de retourner explicitement true ou false .

avoir dit que votre erreur de compilation m'intrigue. À première vue, il semble que cela fonctionne. Pourriez-vous poster un exemple court mais complet qui ne compile pas à compiler? Le type de cette expression conditionnelle devrait être bool sans problèmes. Je suppose que vous avez un scénario plus compliqué et en simplifiant l'exemple que vous avez supprimé le vrai problème.

Quant à la question de bonus: je ne sais pas ce qui serait plus rapide, ni Je me soucie de 99,99% des cas. Je serais émerveillé pour constater qu'il a provoqué un retard important, à moins d'interdire l'inlinage pour une raison quelconque. Allez pour la solution la plus lisible qui est la déclaration de retour simple, imo.


1 commentaires

Merci Jon, le problème était une simple erreur de syntaxe qui a été inaperçue inaperçue (généralement jusqu'à ce que vous avez demandé ce qui ne va pas. J'aime cette réponse, c'est encore plus court! Nombre de retour> 0;



12
votes

Essayez ceci:

return count > 0 ? false : true; 


0 commentaires

1
votes

Ceci fonctionne

return (count > 0 ? true : false);


0 commentaires

5
votes

du point de vue de c # xxx

est meilleur pour sa lecture à lectures.

mais le compilateur optimise le code, de sorte que vos trois options sont réellement identiques une fois compilé. Vous pouvez essayer de regarder le code IL pour vérifier!


0 commentaires