2013-04-09 11 views
9

In C# è possibile convertire una stringa in Int32 utilizzando sia Int32.Parse e Convert.ToInt32. Qual è la differenza tra loro? Quale funziona meglio? Quali sono gli scenari in cui dovrei usare Convert.ToInt32 su Int32.Parse e viceversa?Qual è la differenza tra Convert.ToInt32 e Int32.Parse?

+3

@vanneto: la domanda potrebbe essere un duplicato, ma le risposte non lo sono. – th1rdey3

risposta

8

Fondamentalmente Convert.ToInt32 usi 'Int32.Parse' dietro le quinte, ma la linea di fondo Convert.ToInt32 Un null tornerà 0. mentre in Int32.Parse verrà sollevata un'eccezione.

2

Convert.ToInt32 (valore stringa)

Da MSDN:

Restituisce un intero a 32 bit firmato equivalente al valore di valore. - oppure - Zero se valore è un riferimento null (Nothing in Visual Basic). Il valore restituito è il risultato del richiamo del metodo Int32.Parse sul valore.

2

Il metodo Int32.Parse (stringa s) converte la rappresentazione di stringa di un numero nel suo equivalente intero con segno a 32 bit. Quando s è un riferimento null, genererà ArgumentNullException.

che

metodo

Convert.ToInt32 (stringa s) converte la rappresentazione stringa specificata di 32 bit intero con segno equivalente. Questo chiama a sua volta il metodo Int32.Parse(). Quando s è un riferimento null, restituirà 0 anziché generare ArgumentNullException.

18

se si guarda con Reflector o ILSpy nel mscorlib si vedrà il seguente codice per Convert.ToInt32

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

Quindi, internamente usa il int.Parse ma con il CurrentCulture. E in realtà dal codice è comprensibile perché quando si specifica null come un parametro questo metodo non genera un'eccezione.

Problemi correlati