viernes, octubre 13, 2006

Nullable Types

Hola, desarrollando una aplicacion me tope con algo curioso e interesante que viene con el .Net Farmework 2.0, esto es con respecto a los valores del tipo Anulables o Nullable Types que nos brinda la posibilidad de asignar valores booleanos como null a tipos de datos predeterminados como int, double, entre otros.

Veamos que es todo esto:El tipo Nullable es una estructura que combina un valor del tipo correspondiente (si el tipo de dato es int, este valor puede ser 10, 4, o cualquier otro perteneciente a este tipo de dato) con un indicador boleano null. Una instancia de este tipo Nullable tiene 2 propiedades de solo lectura: HasValue, de tipo bool, y Value, del tipo correspondiente al tipo de valor declarado para la variable Nullable.

Veamos esto con un poco de codigo:
      int? edad = 23;
      if ( edad.HasValue )
            Console.WriteLine("Valor de Edad: {0}", edad);

Cuidado con esto:
      //Estamos ante la generacion de una excepcion
      int? miEdad = null;
      int? miEdadEn3Años = miEdad.Value + 3;

Por que? ya que int? no permite operar con valores nulos, al menos si usamos la propiedad Value para obtener el valor.

Para evitar este tipo de Contratiempos tenemos el metodo GetValueOrDefault, el cual tiene dos sobrecargas, una sin parámetros, en la que si no está asignado (es nulo), devolverá el valor por defecto del tipo que representa T, es decir, el tipo que hemos indicado al crearlo, pero también tiene otra sobrecarga en la que podemos indicar el valor por defecto que queramos que devuelva en caso de que el contenido sea nulo, ese valor debe ser del mismo tipo que el "subyacente" o sea del mismo tipo que indicamos al crearlo.
      int? miEdadEn3Años = miEdad.GetValueOrDefault() + 3;
      //        3                                      0                             3

Ya que el metodo GetValueOrDefault retornara el valor por defecto del tipo int (0) y ya no producira dicha excepcion. Un detalle adicional:Una conversion implicita se produce desde un tipo de vlor no nullable hacia una forma nullable de ese tipo (1). Ademas tambien existe una conversion implicita desde el literal null hacia cualquier tipo nullable (2).
      int? x = 126;       //(1)
      int? w = null;       //(2)

Hay muchisimos mas detalles sobre este nuevo tipo Nullable, espero postear mas sobre este tema y otros.

Aca hay algunos links que encontre:
Microsoft MSDN : Nullable Types
La Web del Guille : Tipos anulables (en VB y C# 2005)
Blog de Sergio Tarrillo : "Nullable type" -> en .NET Framework 2.0!


1 comentario:

Percy dijo...

Hola Daniel, felicidades por el blog, espero que estes siempre escribiendo :P...

saludos y bienvenido al mundo de los bloggers...

PERCY REYES
http://www.ozonicco.info
http://ozonicco.blogsome.com/