Lors de l'analyse des entrées utilisateur, il est généralement recommandé de ne pas lever et intercepter les exceptions mais plutôt d'utiliser des méthodes de validation. Dans le .NET BCL, ce serait la différence entre, par exemple, int.Parse
(lève une exception sur les données non valides) et int.TryParse
(renvoie false
sur les données non valides).
Je conçois le mien
Foo.TryParse(string s, out Foo result)
et je ne suis pas sûr de la valeur de retour. Je pourrais utiliser bool
comme la propre TryParse
méthode de .NET , mais cela ne donnerait aucune indication sur le type d'erreur, sur la raison exacte pour laquelle il s
n'a pas pu être analysé dans un Foo
. (Par exemple, s
pourrait avoir des parenthèses sans correspondance, ou le mauvais nombre de caractères, ou un Bar
sans correspondant Baz
, etc.)
En tant qu'utilisateur d'API, je n'aime pas du tout les méthodes qui renvoient simplement un succès / échec booléen sans me dire pourquoi l'opération a échoué. Cela fait du débogage un jeu de devinettes, et je ne veux pas non plus imposer cela aux clients de ma bibliothèque.
Je peux penser à de nombreuses solutions de contournement à ce problème (renvoyer les codes d'état, renvoyer une chaîne d'erreur, ajouter une chaîne d'erreur comme paramètre de sortie), mais ils ont tous leurs inconvénients respectifs, et je veux également rester cohérent avec les conventions de le .NET Framework .
Ainsi, ma question est la suivante:
Existe-t-il des méthodes dans le .NET Framework qui (a) analysent les entrées sans lever d'exceptions et (b) renvoient toujours des informations d'erreur plus détaillées qu'un simple booléen vrai / faux?
Parse()
.