Réponses:
Parse
lève une exception s'il ne peut pas analyser la valeur, alors que TryParse
retourne un bool
indiquant s'il a réussi.
TryParse
ne fonctionne pas seulement try
/ en catch
interne - tout l'intérêt de celui-ci est qu'il est implémenté sans exceptions afin qu'il soit rapide. En fait, la manière la plus probable de l'implémenter est que la Parse
méthode appellera en interne TryParse
puis lèvera une exception si elle retourne false
.
En un mot, utilisez Parse
si vous êtes sûr que la valeur sera valide; sinon utilisez TryParse
.
Si la chaîne ne peut pas être convertie en entier, alors
int.Parse()
lancera une exceptionint.TryParse()
retournera false (mais ne lèvera pas d'exception)La méthode TryParse vous permet de tester si quelque chose est analysable. Si vous essayez Parse comme dans la première instance avec un int invalide, vous obtiendrez une exception pendant que dans TryParse, il retourne un booléen vous indiquant si l'analyse a réussi ou non.
En note de bas de page, la transmission de null à la plupart des méthodes TryParse lèvera une exception.
TryParse et la taxe d'exception
Parse lève une exception si la conversion d'une chaîne vers le type de données spécifié échoue, alors que TryParse évite explicitement de lever une exception.
TryParse ne renvoie pas la valeur, il renvoie un code d'état pour indiquer si l'analyse a réussi (et ne lève pas d'exception).
Pour mémoire, je teste deux codes: qui essaient simplement de convertir une chaîne en un nombre et en cas d'échec, attribuez un numéro à zéro.
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
et:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
Pour c #, la meilleure option est d'utiliser tryparse car l'alternative try & Catch a levé l'exception
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
Qu'il soit douloureux, lent et indésirable, cependant, le code ne s'arrête pas à moins que l'exception de Debug ne soit réglée pour s'arrêter avec lui.
Je sais que c'est un très vieux post, mais j'ai pensé à partager quelques détails supplémentaires sur Parse vs TryParse.
J'ai eu un scénario dans lequel DateTime doit être convertie en String et si datevalue null ou string.empty nous étions confrontés à une exception. Afin de surmonter cela, nous avons remplacé Parse par TryParse et obtiendrons la date par défaut.
Ancien code:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
Nouveau code:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
Vous devez déclarer une autre variable et l'utiliser comme Out pour TryParse.
startDate
et endDate
comme DateTime.TryParse
cela les écrasera toujours avec DateTime.MinValue
. Si des représentations de date incorrectes doivent être converties en une valeur différente, vérifiez la valeur de retour de DateTime.TryParse
et si elle est fausse, définissez la valeur explicitement.
DateTime?
( DateTime nullable )
double.Parse ("-"); lève une exception, tandis que double.TryParse ("-", out parsed); analyse à 0 donc je suppose que TryParse effectue des conversions plus complexes.
TryParse
revient-il true
ou false
? C'est ainsi que vous saurez s'il était "valide".