Chaîne vide à Double utilisation (Try)Analyser
J'en ai un avec 1.1 système de construction ici à l'aide de l'Analyser pour la conversion de valeurs (maintenant, c'est de 3,5).
string myString = String.Empty;
double myValue = double.Parse(myString);
jette un FormatException (je m'attendais 0.0).
Si je réécriture utilisant 2.0+
string myString = String.Empty;
double myValue;
if (double.TryParse(myString, out myValue))
//do something
- Je obtenir le voulait 0.0, mais malheureusement, je perds la possibilité d'obtenir un message d'erreur significatif (dans le reste de l'arbre).
Pourquoi me donner Analyser une erreur et TryParse ma valeur attendue?
Est-il possible d'obtenir le message d'erreur de TryParse (le temps n'est pas le problème)?
Je ne veux pas travailler autour d'elle comme ça:
- Éviter l'erreur à l'aide de si...alors
myValue = myString.Length == 0 ? 0.0 : double.Parse(myString);
- Deux Appels si une erreur s'est produite
if (!double.TryParse(myString, out myValue)) myValue = double.Parse(myString);
Comment est “la chaîne d'Entrée n'était pas dans un format correct.” un “message d'erreur significatif”?
Quel est le problème avec elle? Une chaîne vide n'est pas valide d'un nombre double. Comment beaucoup plus de détails dans le message d'erreur avez-vous vous attendre?
Quel est le problème avec elle? Une chaîne vide n'est pas valide d'un nombre double. Comment beaucoup plus de détails dans le message d'erreur avez-vous vous attendre?
OriginalL'auteur UNeverNo | 2012-12-19
Vous devez vous connecter pour publier un commentaire.
Parse
déclenche une exception si la chaîne ne peut pas être analysé etTryParse
renvoie unebool
. Vous pouvez gérer ce bool (true si le traitement a été un succès, sinon false) pour afficher les succès/message d'erreur que vous souhaitez afficher.Depuis
myValue
est unout
paramètre doit être réglé par la méthode de la sorte, si la chaîne ne peut pas être analysé, TryParse le définit comme 0.0 qui est pourquoi vous obtenez ce numéro lors de l'utilisation de la méthode TryParse.TryParse
numéros.Oui, vous avez raison. Retiré de la partie 🙂
Argh vous êtes en droit de le booléen est de retour faux, pensé que c'était vrai.
Une façon de mettre en œuvre cela est
internal static bool Parse (string s, NumberStyles style, IFormatProvider provider, bool tryParse, out double result, out Exception exc)
et en les utilisant dans les deuxParse()
etTryParse()
(c'est la façon dont il est mis en œuvre en Mono). La création de l'objet de l'exception n'est pas un problème, mais lancer/attraper require qu'il serait coûteux.OriginalL'auteur keyboardP
Non, il n'est pas possible d'obtenir le message d'erreur exact. Vous voulez savoir si il est possible de convertir le double et le résultat, si c'est possible. La raison exacte de l'échec de la conversion est caché.
OriginalL'auteur Toni Petrina
TryParse vous permet de convertir sans jeter exception et retourne true en cas de succès. L'action que vous prenez dépend de vous
Il est utile lorsque vous n'êtes pas sûr si les commentaires seront toujours les numéros de
Que voulez-vous dire exactement? Quelles autres informations avez-vous besoin de connaître au-delà de "Ce n'est pas de convertir-mesure pour un double." que la fausse déclaration de valeur vous donne?
FormatException. Vous n'avez même pas besoin d'en savoir plus 'cos
false
signifie que la conversion n'a pas réussi. Dites simplement à votre INTERFACE utilisateur que la valeur n'est pas pris en chargepas d'exception qui s'est passé et même si c'est arrivé à l'interne, TryParse devrait avoir "digéré" que l'exception d'un booléen 'false' pour vous. le point dans 'TrySomething méthodes, c'est qu'ils doivent faire leur travail sans en permettant "digeste" exceptions à atteindre notre "boolishly écoulement de sang".
OriginalL'auteur codingbiz
Parce que c'est la façon dont l'interface est conçue.
TryParse
ne pas lever une exception si l'entrée a un format non valide. Au lieu de cela, il retournefalse
.Non, mais vous pouvez faire votre propre message d'erreur.
Mais si vous souhaitez lancer une exception quand il ya une erreur, c'est plus simple d'utiliser
Parse
.OriginalL'auteur Mark Byers
TryParse
est mis en œuvre en quelque sorte comme ceci:De sorte que vous pouvez le faire simplement de la même manière:
Bien sûr, je suis d'accord, que vous ne devez pas utiliser les exceptions à la logique et que la mise en œuvre est terrible. Je ne voudrais pas l'utiliser, soit. Mais lorsque cette réponse que je faisais allusion à son commentaire "le temps n'est pas un problème". C'est juste une réponse, si elle fait sens ou non, est la desicion de la personne. 😉
OriginalL'auteur Carsten
Oublier
double.TryParse
, comme elle ne vous dit pas (par conception) pourquoi l'analyse a échoué. Le faire à l'Ancienne:OriginalL'auteur Humberto
Paramètres de sortie doit être réglé, donc si TryParse échoue il va initialiser la sortie par défaut avant il retourne, cependant, vous pourrez et dans le "else" en boucle... ce qui veut dire qu'il a échoué...
Essayez d'exécuter le code ci-dessous, qui va vous montrer que TryParse en fait remplace la valeur, mais indique que l'analyse ne parvient pas...
Donc à la fois d'Analyser et de TryParse échoue sur la chaîne.Vide, ils ont juste signaler que l'échec différemment, ce qui est le point de l'ensemble de TryParse, il n'est jamais fait de jeter une exception...
OriginalL'auteur Jens