El blog del burgués

9 julio 2009

Tipos anulables en C#

Filed under: C# — elburgues @ 11:37 PM

Todos los tipos de datos numéricos y los tipos booleanos son tipos de datos por valor y nunca pueden ser asignados a ‘nulo’. Desde el estreno 2.0 de .NET es posible que estos tipos de datos sean anulables de manera que puedan representar todos los valores de su tipo de datos subyacente más el valor ‘nulo’ (nothing en Visual Basic).Así que si declaramos un booleano anulable, se le puede asignar los valores true, false y ‘nulo’. Esto es muy útil cuando se trabaja con bases de datos. Es muy común encontrar registros en dónde uno o más campos son ‘nulos’.

Se puede definir una variable anulable mediante el sufijo ‘?’. Esta sintaxis es solo aplicable a los tipos de datos por valor: 

int? enteroAnulable = 10;

bool? booleanoAnulable = null;

Si se intenta hacer esto mismo con los tipos por referencia (incluido las cadenas), dará un error en tiempo de compilación:

string? cadena = "¡esto daría error!";

En C# el sufijo ? es un atajo para la creación de una instancia de System.Nullable<T>.  El tipo System.Nullable <T> proporciona un conjunto de miembros y todos los tipos anulables pueden hacer uso de ellos. Por ejemplo, se puede saber si una variable anulable ha sido asignada a ‘nulo’ usando la propiedad HasValue o el operador != de las siguientes maneras:

int? i = 10;

if (i.HasValue)

Console.WriteLine("Value of 'i' is: {0}", i.Value);

else

Console.WriteLine("Value of 'i' is undefined.");
 

bool? b = null;

if (b != null)

Console.WriteLine("Value of 'b' is: {0}", b.Value);

else

Console.WriteLine("Value of 'b' is undefined.");

Otra forma de implementar lo anterior (sin el atajo del sufijo ‘?’) sería:

Nullable<double> dobleAnulable = 3.14;

Nullable<char> charAnulable = 'a';

Nullable<int>[] arrayEnterosAnulables = new int?[10];

Finalmente señalar que los tipos anulables pueden hacer uso del operador ‘??’.  Este operador permite asignar un valor a un tipo anulable si el valor recuperado es en realidad ‘nulo’. Por ejemplo, suponga que en la siguiente línea de código, el método ObtenerEnteroDesdeBaseDatos() devuelve un ‘nulo’. Entonces, la variable ‘miDato’ es asignado al valor 100:

int? miDato = ObtenerEnteroDesdeBaseDatos () ?? 100;
Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: