64 votes

Quel est le meilleur: int.TryParse ou essayez {int.Parse ()} catch

Je sais .. Je sais ... La performance n'est pas la principale préoccupation ici, mais juste par curiosité, quoi de mieux?

 bool parsed = int.TryParse(string, out num);
if (parsed)
...
 

OU

 try {
    int.Parse(string);
}
catch () {
    do something...
}
 

86voto

Fredrik Mörk Points 85694

Mieux est très subjective. Par exemple, personnellement, je préfère int.TryParse, depuis que j'ai le plus souvent ne se soucient pas pourquoi l'analyse échoue, s'il échoue. Toutefois, int.Parse peut (selon la documentation) de jeter trois exceptions:

  • l'entrée est nulle
  • l'entrée n'est pas dans un format valide
  • l'entrée contient un nombre qui procudes un dépassement de capacité

Si vous vous souciez de pourquoi il ne parvient pas, alors int.Parse est clairement le meilleur choix.

Comme toujours, le contexte est roi.

40voto

Eric Lippert Points 300275

Est-il exceptionnel que la conversion échoue parfois ou est-il normal et normal que la conversion échoue parfois? Si l'ancien, utilisez une exception . Si ce dernier, évitez les exceptions . Les exceptions sont appelées "exceptions" pour une raison; vous ne devriez les utiliser que pour gérer des circonstances exceptionnelles .

22voto

greg84 Points 3635

Si il est en effet prévu que la conversion sera parfois échouer, j'aime utiliser int.TryParse et un tel soin sur une ligne avec le conditionnel (Ternaire) de l'opérateur, comme ceci:

int myInt = int.TryParse(myString, out myInt) ? myInt : 0;

Dans ce cas, zéro sera utilisé comme valeur par défaut si la méthode TryParse échoue.

Également très utile pour les types nullables, qui remplace toute valeur par défaut avec null si la conversion échoue.

10voto

George Johnston Points 17237

La première. La seconde est considérée comme codant par exception .

8voto

Paddy Points 16834

Personnellement, je préférerais:

 if (int.TryParse(string, out num))
{
   ...
} 
 

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