Al analizar la entrada del usuario, generalmente se recomienda no lanzar y capturar excepciones, sino usar métodos de validación. En .NET BCL, esta sería la diferencia entre, por ejemplo, int.Parse(produce una excepción en datos no válidos) y int.TryParse(devuelve falsedatos no válidos).
Estoy diseñando el mío
Foo.TryParse(string s, out Foo result)
método y no estoy seguro sobre el valor de retorno. Podría usar boolcomo el propio TryParsemétodo de .NET , pero eso no daría ninguna indicación sobre el tipo de error, sobre la razón exacta por la que s no se puede analizar en a Foo. (Por ejemplo, spodría tener paréntesis sin igual, o el número incorrecto de caracteres, o un Barsin un correspondiente Baz, etc.)
Como usuario de API, no me gustan mucho los métodos que solo devuelven un Booleano de éxito / fracaso sin decirme por qué falló la operación. Esto hace que la depuración sea un juego de adivinanzas, y tampoco quiero imponer eso a los clientes de mi biblioteca.
Puedo pensar en muchas soluciones a este problema (códigos de estado de retorno, devolver una cadena de error, agregar una cadena de error como parámetro de salida), pero todos tienen sus desventajas respectivas, y también quiero mantener la coherencia con las convenciones de .NET Framework .
Por lo tanto, mi pregunta es la siguiente:
¿Existen métodos en .NET Framework que (a) analicen la entrada sin generar excepciones y (b) sigan devolviendo información de error más detallada que un simple booleano verdadero / falso?
Parse().