Professional Documents
Culture Documents
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:
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);
}
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.
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
}
Los parmetros para el mtodo IsDefined son el tipo del enumerador y la variable a evaluar.
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:
///<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.