Tipos nullables en C#

1 - Tipos nullables en C#

No podemos inicializar una variable a null, porque en sí es un valor null, osea que no sería del mismo tipo.

En cristiano, no podemos hacer lo siguiente

int enteroNulo = null;

nota: en nuestro ejemplo lo realizaremos con un entero, pero puede ser cualquier tipo de dato, como un decimal o un datetime

En cambio C# nos permite tratar esta encrucijada permitiéndonos modificar los tipos para que estos sean nullables. esta acción se realiza indicando el carácter ? después del tipo de dato que va a ser.

int? enteroNulo = null;
enteroNulo =123;

como vemos nos permite tener un entero null. Y le podemos asignar un valor sin ningun problema. 

Pero si queremos asignar este valor a una variable que sí es un entero, nos dará un error.

int enteroNormal = 234;
int? enteroNulo = 123;
enteroNormal = enteroNulo;

esto tiene sentido, ya que no son el mismo tipo, int? puede contener un valor nulo, mientras que int no puede contenerlo. para realizar esa conversión debemos utilizar una de sus propiedades.

1.1  - Propiedades de los tipos nullables

Los tipos nulos nos dejan acceder a ciertas propiedades que nos permitirán de una manera sencilla identificar varias acciones que necesitamos, como puede ser la propiedad HasValue, la cual nos dice si contiene valor o si es un null. para finalmente acceder a la propiedad Value, que nos dará el valor de esa variable si no es un nulo.

Por lo que, basándonos en el ejemplo anterior, podríamos comprar si la variable enteroNulo tiene un valor y si no lo tiene, asignarlo.

if(enteroNulo.HasValue()) 
{
    enteroNormal = enteronulo.Value;
}