Quando si analizza l'input dell'utente, si consiglia generalmente di non generare eccezioni ma piuttosto di utilizzare metodi di convalida. Nel .NET BCL, questa sarebbe la differenza tra, ad esempio, int.Parse
(genera un'eccezione su dati non validi) e int.TryParse
(restituisce false
dati non validi).
Sto progettando il mio
Foo.TryParse(string s, out Foo result)
e non sono sicuro del valore restituito. Potrei usare bool
come il TryParse
metodo di .NET , ma questo non darebbe alcuna indicazione sul tipo di errore, sul motivo esatto per cui s
non è stato possibile analizzare in un Foo
. (Ad esempio, s
potrebbe avere una parentesi senza pari, o un numero errato di caratteri o un Bar
senza un corrispondente Baz
, ecc.)
Come utente delle API, non mi piacciono i metodi che restituiscono un booleano di successo / fallimento senza dirmi perché l'operazione non è riuscita. Questo rende il debug un gioco d'ipotesi e non voglio nemmeno imporlo sui client della mia biblioteca.
Posso pensare a molte soluzioni alternative a questo problema (restituire codici di stato, restituire una stringa di errore, aggiungere una stringa di errore come parametro out), ma hanno tutti i loro lati negativi e voglio anche rimanere coerente con le convenzioni di .NET Framework .
Pertanto, la mia domanda è la seguente:
Esistono metodi in .NET Framework che (a) analizzano l'input senza generare eccezioni e (b) restituiscono comunque informazioni di errore più dettagliate di un semplice booleano true / false?
Parse()
.