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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top