domingo, 28 de noviembre de 2010

Int32.TryParse para evitar errores de objeto nulo

En Cesar utilizamos mucho las conversiones explicitas para cambiar el tipo de un objeto de forma rápida y sencilla:
Int32 numero = (Int32) textBox.text;
Pero como lo que esté dentro del texto no sea un número… un bonito reventón vamos a obtener. Por eso me he acostumbrado a utilizar un método publico que utilice el TryParse del tipo utilizado.
public static Boolean convierteEnNumero(string pNumero, out Int32 numero)
{
return Int32.TryParse(pNumero, out numero);
}
Este método me devuelve dos valores. Un booleano que me indica si la conversión ha sido posible o no, y un número en donde se almacena el número convertido o me devuelve CERO si no ha podido hacerse a conversión.
Lo mejor es que jugando con la firma del método puedo ajustar la respuesta a lo que necesito:
Int32 numero;
// Recupero si se ha podido convertir y el valor numérico.
if (convierteEnNumero("14", out numero) == true && numero > 1)
{ numero++; };
// Recupero el valor numérico de la conversión.
if (convierteEnNumero("14") > 1)
{ numero++; };
// Compruebo si es un número. Recupero si se ha podido convertir. 
if (IsNumero("14"))
{ numero++; };
public static Boolean convierteEnNumero(string pNumero, out Int32 numero)
{
  return Int32.TryParse(pNumero, out numero);
}
public static Int32 convierteEnNumero(string pNumero)
{
   Int32 numero;
   Int32.TryParse(pNumero, out numero);
   return numero;      
}
public static Boolean IsNumero(string pNumero)
{
    Int32 numero;
    return Int32.TryParse(pNumero, out numero);
}

A mí me ha sido de mucha ayuda para evitar los errores tontos e inesperados de conversiones.

No hay comentarios: