2010-10-18 14 views
14

Eventuali duplicati:
Whats the main difference between int.Parse() and Convert.ToInt32Migliore utilizzo int.Parse o Convert.ToInt32

Ciao ragazzi, vorrei sapere quali sono pro e contro dell'utilizzo di Convert.ToInt32 VS int.Parse. Grazie per il supporto!

Ecco un esempio di sintassi che sto usando

  int myPageSize = Convert.ToInt32(uxPageSizeUsersSelector.SelectedValue); 

      int myPageSize = int.Parse(uxPageSizeUsersSelector.SelectedValue); 

Ho anche scoperto questo articolo, forse può aiutare per una discussione http://dotnetperls.com/int-parse http://aspdotnethacker.blogspot.com/2010/04/difference-between-int32parsestring.html http://aspdotnethacker.blogspot.com/p/visual-studio-performance-wizard.html

+0

Né il metodo è più veloce di un codice int inio personalizzato, perché in parse deve occuparsi di spazi, - hyphones, nuove linee, ecc. –

risposta

25

Convert.ToInt32 è di trattare qualsiasi oggetto che implementa IConvertible e può essere convertito in un int. Inoltre, Convert.ToInt32 restituisce 0 per null, mentre int.Parse genera uno ArgumentNullException.

int.Parse è specifico per le stringhe.

Come si è visto, IConvertible attuazione del tipo string utilizza semplicemente int.Parse nel suo metodo ToInt32.

Così efficace, se si chiama Convert.ToIn32 su un string, si sono chiamando int.Parse, solo con un po 'più in alto (un altro paio di chiamate di metodo).

Questo vale per qualsiasi conversione da string a un tipo primitivo (tutti chiamano Parse). Pertanto, se hai a che fare con gli oggetti con valore string (ad esempio, stai analizzando un file di testo), ti consigliamo di specificare Parse, semplicemente perché è più diretto.

Conversione di oggetti arbitrari (restituiti da una libreria esterna, ad esempio) è lo scenario in cui sceglierei la classe Convert.

2

L'interfaccia Convert è un obiettivo più generale uno. Il risultato netto dovrebbe essere lo stesso però.

Internamente, semplicemente chiama int.Parse:

public static int ToInt32(String value) { 
    if (value == null) 
     return 0; 
    return Int32.Parse(value, CultureInfo.CurrentCulture); 
} 

Sopra il codice da sorgente del riferimento.

3

Non riesco a rispondere in base alle prestazioni, ma il mio metodo preferito è sempre int.tryparse (mystring, out myint) poiché restituisce un errore pulito che è possibile verificare nel flusso del programma (anziché eseguire un tentativo/acquisizione) .

+0

Questo dipende molto da cosa si vuole fare. Se hai davvero bisogno che l'analisi abbia successo, o sai che è una rappresentazione valida di un numero, è assolutamente valido utilizzare int.Parse. Cosa faresti quando TryParse fallisce in questo caso? Dovresti solo lanciare un'altra eccezione. –

+1

Nel mio utilizzo, verrebbe generata un'eccezione * una * e questa sarebbe un'eccezione significativa alla mia applicazione: nel tuo utilizzo, verrebbero lanciate due o più eccezioni, una o più generate dall'int.Parse e catturate da te e quello che si lancia per aggiungere contesto agli errori passati di nuovo. – Moo

17

Non c'è molta differenza. Ecco una citazione trovata su msdn.

Fondamentalmente la classe Convert rende più facile da convertire tra tutti la base tipi.

Il Convert.ToInt32 (String, IFormatProvider) al di sotto chiama loInt32.Parse. Quindi, l'unica differenza è che se una stringa nulla viene passata a Converti restituisce 0, mentre Int32.Parse genera una ArgumentNullException . MSDN

Problemi correlati