Ao analisar a entrada do usuário, geralmente é recomendável não lançar e capturar exceções, mas usar métodos de validação. No .NET BCL, essa seria a diferença entre, por exemplo, int.Parse
(lança uma exceção em dados inválidos) e int.TryParse
(retorna false
em dados inválidos).
Estou projetando meu próprio
Foo.TryParse(string s, out Foo result)
método e não tenho certeza sobre o valor de retorno. Eu poderia usar bool
como o próprio TryParse
método do .NET , mas isso não daria nenhuma indicação sobre o tipo de erro, sobre o motivo exato pelo qual s
não poderia ser analisado em um arquivo Foo
. (Por exemplo, s
pode ter parênteses sem correspondência, ou o número errado de caracteres, ou um Bar
sem um correspondente Baz
, etc.)
Como usuário de APIs, não gosto de métodos que retornam um booleano de êxito / falha sem me dizer por que a operação falhou. Isso torna a depuração um jogo de adivinhação, e também não quero impor isso aos clientes da minha biblioteca.
Posso pensar em várias soluções alternativas para esse problema (retornar códigos de status, retornar uma string de erro, adicionar uma string de erro como um parâmetro out), mas todas elas têm suas respectivas desvantagens e também quero permanecer consistente com as convenções de o .NET Framework .
Assim, minha pergunta é a seguinte:
Existem métodos no .NET Framework que (a) analisam a entrada sem gerar exceções e (b) ainda retornam informações de erro mais detalhadas do que um simples booleano verdadeiro / falso?
Parse()
.