You are on page 1of 5

Deployando .

NET
C#: Valor nulo para tipos de datos comunes
Es extrao incorrecto ridculo estpido curioso que a los datos de
tipo int, string, char, byte, float, double, etc. no se les pueda asignar un valor nulo. Esto
no sera de importancia para nosotros si no fuera porque en C#, siempre debemos darle un valor
a toda variable al ser inicializada, ya sea utilizando el constructor de su clase o, como solemos
hacer para solventar este problema, inicializarla con valor nulo. Pero qu hacemos si la clase no
nos permite asignar este valor? Muy fcilmente nos toparemos con este problema mientras
programamos, pero existe una solucin.
Todos estos tipos de datos son un atajo (alias) a una clase del namespace System.

string: System.String

char: System.Char

byte: System.Byte

short: System.Int16

int: System.Int32

long: System.Int64

double: System.Double

float: System.Single

enum: Enum

Al ser todos clases, heredan en ltima instancia de la clase Object. Aqu est
lo extrao incorrecto ridculo estpido curioso, pues, un objeto object (vlgame la redundancia)
s puede ser nulo. Pero bueno. El punto es que, al ser clases, todas tienen funciones y
propiedades especficas para su funcionamiento, y aunque el lenguaje nos prohiba hacer una
igualacin a null, s nos permite realizar comparaciones para estos tipos.

MinValue
Para la mayora de los tipos, existe la propiedad MinValue.
int entero1 = 0;
int entero2;
float flotante1, flotante2 = 10.4f, flotante3;
DateTime dt;

Las variables entero1 y flotante2 tienen un valor asignado desde su declaracin. El resto de las
variables no, por lo que de momento sus valores sern:

entero2 = Int32.MinValue int.MinValue

flotante2 y flotante3 = Single.MinValue float.MinValue

dt = DateTime.MinValue

MinValue se utiliza para los tipos int, short, byte, long, char, DateTime, float, decimal, double y
similares, as como uint, ulong, ushort, etc.
Tambin est la propiedad MaxValue, que indica el valor mximo permitido para estos tipos de
dato de estos.
///<summary>
///<p>Lo s, qu propsito tiene esta funcin? Slo uno: servir de ejemplo xD</p>
///<summary>
public int LongToInt(long valor){
if (valor == Int64.MinValue)
throw new Exception("No se ha definido el valor.");
elseif (valor > Int32.MaxValue)
throw new Exception("No se puede. El valor es muy grande.");
else
return Convert.ToInt32(valor);
}

El caso de las variables String


Debo confesar que este tipo de dato me confunde mucho. Hice varias pruebas: declarando una
variable string con valor null me dio error; cambi el tipo de dato string por String y no me dio
error; cre una segunda variable con tipo String y s me dio error; borr todo, cre variables
string y String diferentes, todas nulas, y no me dio error. Conclusin: no s qu demonios pasa
con esta clase!
En fin. La clase String tiene una propiedad Empty, que en realidad nos trae una cadena de texto
vaca. Yo acostumbro usarla cuando quiero limpiar una variable, aunque eso no es necesario,
supongo.
string texto1 = String.Empty;

Para hacer comparaciones (que es en lo que siempre me falla, el tratar de comparar con null), lo
ms prctico es usar la funcin IsNullOrEmpty de esta clase.

public void ImprimirTexto(string texto){


if (String.IsNullOrEmpty(texto))
throw new Exception("El texto est vaco o nulo.");
Console.Write(texto);
}

IsNullOrEmpty devuelve un valor verdadero si la variable est vaca ( o String.Empty) si no ha


sido inicializada.

Enumeradores
Manipular enumeradores (enum) puede ser algo confuso al principio, pero no es difcil. La
clase Enum tiene la propiedad IsDefined, que determina, obviamente, si se le ha dado un valor
a la variable.
enum Enumerador{
uno,
dos,
tres
}

public void Metodo(Enumerador e){


if (Enum.IsDefined(typeof(Enumerador), e){
// Hacer cosas con el enumerador
}
else
throw new Exception("No se ha definido el enumerador.");
}

Los parmetros para el mtodo IsDefined son el tipo del enumerador y la variable a evaluar.

Y sobre el tipo bool


sinceramente, no tengo la menor idea. El tipo bool, alias de la clase System.Boolean, no tiene
una propiedad para definir la variable con valor nulo.
He buscado mucho sobre Boolean, pero no encuentro nada. Sin embargo, hay otra forma con la
que s podemos asignar un valor null a esto tipos de dato:

Nullable types
Existe una variante para cada tipo de dato comn que s nos permite asignar el valor null. No
conozco una traduccin real, as que los llamaremos nulables.
Los tipos nulables se definen exactamente como los normales, a excepcin del signo ? al final
del nombre del tipo.
int? entero1 = null;
int? entero2 = 4;
double? doble = null;
bool? boleanoNulo = null;

entero2 = null;
if (doble == null)
throw new Exception("Es nulo.");

Ahora s podemos tener cualquier tipo de dato nulo. Adems, Todos estos tipos de dato cuentan
con dos propiedades especiales:

HasValue: Determina si se asign un valor a esta variable.

Value: Devuelve el valor en el tipo de dato normal de la variable.

///<summary>
///<p>Otra funcin sin sentido que noms sirve de ejemplo.</p>
///</summary>
public int ValorQuePuedeSerNuloAEntero(int? valorQuePuedeSerNulo){
if (valorQuePuedeSerNulo.HasValue)

return valorQuePuedeSerNulo.Value;
else
throw new Exception("S, el valor es nulo.");
}

Una variable de tipo nulable no es compatible con una de tipo normal. Para eso existe su
propiedad Value.
En VB.NET, se utiliza la palabra Nullable para estos tipos especiales
Dim var1 As Nullable Integer

Todas las funciones y propiedades de estas clases y las mencionadas al principio &son iguales en
VB, pues son del framework, no del lenguaje.

You might also like