Durante l'analisi dell'input dell'utente, è generalmente consigliato non per generare e intercettare eccezioni, ma piuttosto per utilizzare metodi di convalida. In .NET BCL, questa sarebbe la differenza tra, ad esempio, int.Parse
(genera un'eccezione su dati non validi) e int.TryParse
(restituisce false
su dati non validi).
Sto progettando il mio
Foo.TryParse(string s, out Foo result)
metodo e non sono sicuro del valore restituito. Potrei usare bool
come il metodo TryParse
di .NET, ma ciò non darebbe alcuna indicazione sul tipo di errore, sul motivo esatto perché s
potrebbe non essere analizzato in Foo
. (Ad esempio, s
potrebbe avere una parentesi non corrispondente, o il numero errato di caratteri, o un Bar
senza un corrispondente Baz
, ecc.)
Come utente delle API, non mi piacciono molto i metodi che restituiscono un successo / fallimento Booleano senza dirmi perché l'operazione non è riuscita. Questo rende il debug di un gioco di indovinelli, e non voglio imporlo neanche ai client della mia biblioteca.
Posso pensare a un sacco di soluzioni 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 aspetti negativi, e voglio anche rimanere coerente con le convenzioni di .NET Framework .
Quindi, la mia domanda è la seguente:
Esistono metodi in .NET Framework che (a) analizzano l'input senza generare eccezioni e (b) restituiscono ancora informazioni di errore più dettagliate di un semplice booleano vero / falso?