Parse v. TryParse
Domanda
Qual è la differenza tra Parse () e TryParse ()?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Esiste una forma di controllo degli errori come un blocco Try-Catch?
Soluzione
Parse
genera un'eccezione se non è in grado di analizzare il valore, mentre TryParse
restituisce un bool
che indica se è riuscito.
TryParse
non si limita a provare
/ catturare
internamente - il punto è che è implementato senza eccezioni in modo che sia veloce . In effetti il ??modo in cui è molto probabilmente implementato è che internamente il metodo Parse
chiamerà TryParse
e quindi genererà un'eccezione se restituisce false
.
In poche parole, utilizzare Parse
se si è sicuri che il valore sarà valido; altrimenti usa TryParse
.
Altri suggerimenti
Se la stringa non può essere convertita in un numero intero, quindi
-
int.Parse ()
genererà un'eccezione -
int.TryParse ()
restituirà false (ma non genera un'eccezione)
Il metodo TryParse ti consente di verificare se qualcosa è analizzabile. Se provi Parse come nella prima istanza con un int non valido, otterrai un'eccezione mentre in TryParse, restituisce un valore booleano che ti consente di sapere se l'analisi è riuscita o meno.
Come nota a piè di pagina, passare null alla maggior parte dei metodi TryParse genererà un'eccezione.
TryParse e la tassa sulle eccezioni
Parse genera un'eccezione se la conversione da una stringa al tipo di dati specificato non riesce, mentre TryParse evita esplicitamente di generare un'eccezione.
TryParse non restituisce il valore, restituisce un codice di stato per indicare se l'analisi è riuscita (e non genera un'eccezione).
Per la cronaca, sto testando due codici: che provano semplicemente a convertire da una stringa in un numero e, in caso contrario, assegna il numero a zero.
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
e
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
Per c #, l'opzione migliore è usare tryparse perché prova l'alternativa Cattura generata l'eccezione
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
Che sia doloroso lento e indesiderabile, tuttavia, il codice non si ferma a meno che l'eccezione di Debug non sia risolta per fermarlo.
So che è un post molto vecchio ma ho pensato di condividere qualche dettaglio in più su Parse vs TryParse.
Ho avuto uno scenario in cui DateTime deve essere convertito in String e se datevalue null o string.empty ci trovavamo di fronte a un'eccezione. Per ovviare a questo, abbiamo sostituito Parse con TryParse e otterremo la data predefinita.
Codice precedente:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
Nuovo codice:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
Devono dichiarare un'altra variabile e utilizzata come Out per TryParse.
double.Parse (" - "); solleva un'eccezione, mentre double.TryParse (" - " ;, fuori analizzato); analizza 0 quindi immagino che TryParse faccia conversioni più complesse.