2010-10-18 25 views
14

Duplicar posible:
Whats the main difference between int.Parse() and Convert.ToInt32mejor uso int.Parse o Convert.ToInt32

Hola chicos, me gustaría saber lo que son pro y contras de usar Convert.ToInt32 VS int.Parse. ¡Gracias por su apoyo!

Aquí un ejemplo de la sintaxis que estoy usando

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

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

También descubrí este artículo, tal vez pueden ayudar para una discusión 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

Ninguno de los dos métodos es más rápido que un código personalizado de parse, porque en parse tiene que ocuparse de espacios, - hyphones, nuevas líneas, etc. –

Respuesta

25

Convert.ToInt32 es para hacer frente a cualquier objeto que implementa IConvertible y se puede convertir en un int. Además, Convert.ToInt32 devuelve 0 para null, mientras que int.Parse arroja un ArgumentNullException.

int.Parse es específicamente para tratar con cadenas.

Como resultado, IConvertible aplicación del tipo string simplemente utiliza int.Parse en su método ToInt32.

Así que efectivamente, si se llama a Convert.ToIn32 en un string, que son int.Parse llamar, sólo con un poco más de riesgo (un par de llamadas a métodos).

Esto es cierto para cualquier conversión de string a algún tipo primitivo (todos ellos llaman Parse). Por lo tanto, si está tratando con objetos fuertemente tipados string (por ejemplo, está analizando un archivo de texto), recomendaría Parse, simplemente porque es más directo.

Convertir objetos arbitrarios (devueltos por alguna biblioteca externa, por ejemplo) es el escenario donde optaría por usar la clase Convert.

2

La interfaz Convert es un propósito más general uno. El resultado neto debería ser el mismo sin embargo.

Internamente, sólo llama int.Parse:

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

Por encima de codificación proviene de la fuente de referencia.

3

No puedo responder en función del rendimiento, pero mi método preferido siempre es int.tryparse (mystring, out myint) ya que proporciona una falla limpia que puede probar en el flujo del programa (en lugar de intentar/atrapar) .

+0

Esto realmente depende de lo que quieras hacer. Si realmente necesita que el análisis tenga éxito, o si sabe que es una representación válida de un número, es totalmente válido utilizar int.Parse. ¿Qué harías cuando el TryParse falle en tal caso? Solo lanzarías otra excepción. –

+1

En mi uso, se lanzaría * una * excepción, y eso sería una excepción significativa a mi aplicación: en su uso, se lanzarían dos o más excepciones, una o más lanzadas por el int.Parse y atrapadas por usted y el que lanzas para agregar contexto a los errores pasados. – Moo

17

No hay mucha diferencia. Aquí hay una cita encontrada en msdn.

Básicamente la clase Convert hace que sea más fácil para convertir entre toda la base tipos.

El Convert.ToInt32 (String, IFormatProvider) debajo llama al Int32.Parse. Por lo tanto, la única diferencia es que si se pasa una cadena nula a Convertir devuelve 0, mientras que Int32.Parse arroja un ArgumentNullException. MSDN

Cuestiones relacionadas