CodeGym /Cursos /C# SELF /Activar y configurar Nullable Reference Types (NRT) en tu...

Activar y configurar Nullable Reference Types (NRT) en tu proyecto

C# SELF
Nivel 14 , Lección 2
Disponible

1. Introducción

¿Por qué hay que activar NRT aparte?

Nullable Reference Types (NRT) no es solo azúcar sintáctico, sino un ayudante serio del compilador para luchar contra errores relacionados con null. Pero por razones históricas este modo no está activado por defecto en todos los proyectos antiguos — para no romper la compatibilidad. Si creas un proyecto nuevo en las últimas versiones de .NET (por ejemplo, .NET 7, 8 o 9), lo más probable es que NRT ya esté activado automáticamente. Pero si tu proyecto es viejito o quieres controlar este modo manualmente, tienes que hacerlo explícitamente.

¿Qué hace el modo Nullable Reference Types?

Cuando este modo está activo, el compilador empieza a analizar qué variables de referencia pueden ser null y cuáles no. No afecta la ejecución del programa, pero te va a llenar de advertencias si ve un posible error. Es una forma genial de escribir código fiable, claro y robusto.

¿Cómo saber si el modo NRT está activado?

Si tienes un proyecto nuevo en .NET 6 o superior, seguramente NRT ya está activado. Pero nunca está de más comprobarlo.

  • Abre el archivo del proyecto. Normalmente es el que termina en .csproj.
  • Busca o añade la configuración <Nullable> dentro de la primera etiqueta <PropertyGroup>.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>
Ejemplo de archivo .csproj con NRT activado

Si ahí pone <Nullable>disable</Nullable>, entonces el control de NRT está desactivado.

2. Cómo activar el modo NRT

Desde el .csproj — para todo el proyecto

  1. Abre (o crea) el archivo .csproj.
  2. Dentro del bloque <PropertyGroup> añade o cambia la línea:

<Nullable>enable</Nullable>

Ahora el compilador va a vigilar todos los archivos .cs del proyecto y te va a avisar si ve accesos peligrosos a null.

¿Por qué hacerlo así?
Porque es una configuración global. Desde este momento, todo el proyecto sigue las nuevas reglas: null está bajo sospecha, ¡y la dejadez ya no cuela!

Solo para archivos o trozos de código concretos

Si todavía no te animas a activar el modo estricto para todo el proyecto, puedes practicar en archivos concretos. Para eso se usan directivas de preprocesador:


#nullable enable
string? valor = null; // Aquí el análisis está activado

#nullable disable
string valorAntiguo = null; // Y aquí — ya no

#nullable restore
  • #nullable enable — activa la comprobación hasta el final del archivo.
  • #nullable disable — la desactiva.
  • #nullable restore — recupera la configuración del .csproj o de un archivo externo.

Está guay: puedes activar el control estricto en módulos nuevos sin tocar el código viejo e inestable.

¿Qué más se puede poner en <Nullable>?

Valor Comportamiento
enable
Activa todo: anotaciones y advertencias
disable
Desactiva completamente el análisis de referencias null
warnings
Solo advertencias, sin anotaciones obligatorias
annotations
Se requieren anotaciones, pero el compilador no se queja
restore
Vuelve al comportamiento original (por ejemplo, el de la configuración global)

Normalmente se usa enable o disable.

3. Demostración con ejemplo

Antes de activar NRT

// Modo antiguo, NRT desactivado
string s = null; // Sin quejas

Console.WriteLine(s.Length); // ¡Peligroso! Puede lanzar NullReferenceException

Después de activar NRT

// Modo nuevo, NRT activado
string s = null; // Advertencia: posible asignación de null
Console.WriteLine(s.Length); // Advertencia: posible acceso a null

Ahora el IDE va a subrayar los posibles problemas y el compilador te avisará: Dereference of a possibly null reference. (CS8602)

¿Cómo se arregla esto?

string? s = null;

if (s != null)
{
    Console.WriteLine(s.Length);
}

Así dejas claro: esta variable puede ser null, y el compilador se queda tranquilo.

4. ¿Qué hacer si el proyecto es "a la antigua"?

Muchos proyectos se escribieron en la época en que null estaba en casi todas las variables de referencia. Al activar NRT, es como si contrataras a un auditor estricto que te va a avisar de cada posible problema.

¿Y si hay demasiadas advertencias?

No te agobies — son solo avisos, no errores. El programa sigue compilando igual.

  • Puedes activar NRT solo en archivos nuevos.
  • Poco a poco pon el código en orden: añade ?, haz comprobaciones de null, usa ! (de eso hablamos luego).
  • Recuerda: cuanto más cuidadoso seas con null, menos problemas tendrás después.

Compatibilidad hacia atrás y librerías externas

  • Activar NRT no cambia el comportamiento del código en tiempo de ejecución, solo añade análisis en compilación.
  • El código antiguo puede mostrar muchas advertencias de golpe.
  • Si usas librerías sin anotaciones NRT, el compilador será prudente y asumirá que todo puede ser null.
2
Tarea
C# SELF, nivel 14, lección 2
Bloqueada
Comprobación del funcionamiento de Nullable Reference Types para métodos
Comprobación del funcionamiento de Nullable Reference Types para métodos
2
Tarea
C# SELF, nivel 14, lección 2
Bloqueada
Inclusión parcial de Nullable Reference Types
Inclusión parcial de Nullable Reference Types
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION