martes, 10 de julio de 2007

Int32.Parse vs Convert.ToInt32

Tengo que convertir un valor, proveniente de una caja de texto o una base de datos, en un entero, la pregunta es ¿utilizo Int32.Parse ó Convert.ToInt32?, sé que muchas personas desconocen Int32.Parse, la verdad es que yo la utilizaba de mis días de Java (que fueron pocos pero ese método lo usé), y no tenía claro que diferencia podía haber con la buena y nunca bien ponderada clase Convert más precisamente el método Int32, bueno vamos a develar el misterio.

Imaginemos que lo que vamos a convertir en Int32 es un dato proveniente de una caja de texto, supongamos también que limitamos a que sólo se ingresen números, ¿qué puede pasar?, puede pasar que el usuario escriba un número (un texto en realidad) por lo tanto no vamos a tener problemas con Int32.Parse, ahora, si el valor viene de una base de datos y puede ser nulo (olvidemos los tipos Nullables) ¿qué puede pasar?, una fea excepción por lo tanto vamos a tener que hacer try/catch con lo cual se nos puede volver poco claro el código, es más, si estamos asignando un grupo de valores se va a poner realmente feo, en este punto es donde llega la clase Convert a nuestra ayuda, vemos la implementación

   1:  public static int ToInt32(string value) 
   2:  {
   3:    if (value == null) 
   4:    { 
   5:      return 0; 
   6:    }
   7:    return int.Parse(value, CultureInfo.CurrentCulture); 
   8:  } 

Lo que podemos ver es que si pasamos un null al método ToInt32 vamos a recibir un "0" y no una excepción. Esto es más que nada para comprender esas pequeñas diferencias en las cosas que usamos todos los días para programar y que, en ocasiones como esta, en realidad hace la diferencia. Una vez más es mejor comprender que recordar, hasta la próxima.