Tipos de Referencia Anulable (Nullable Reference Types):
A diferencia de los tipos por referencia, que pueden ser nulos sin problema, los tipos primitivos deben contener algún valor correcto. Una de las características que se incorpora desde C# 2.0 es la de que los tipos primitivos puedan ser asignados a null.
// tipo por referencia, correcto
String cadena = null;
// tipo primitivo, incorrecto
int entero = null;
// tipo anulable, correcto
int? entero = null;
// en el tipo bool, null equivale a false
bool? booleano = null;En la versión 8.0, los tipos de referencia no serían más anulables por defecto. En lugar de esto se deberían marcar explícitamente utilizando la misma sintaxis "Tipo?" que se utiliza para tipos de valor anulable.