0Pricing
C# Academy · Lección

Protegerse frente a valores nulos

Validación y patrones

Protegerse frente a valores nulos es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.

¿Por qué protegerse contra null?

Un método que recibe un null inesperado suele fallar más adelante con una confusa NullReferenceException en lo profundo de la pila de llamadas.

Protegerse contra null significa comprobar los argumentos por adelantado y producir un error claro, de modo que el error señale directamente la causa real.

Comprobación clásica de null

La protección más sencilla consiste en realizar una comprobación explícita que produzca una ArgumentNullException cuando un argumento obligatorio sea null.

Esto valida la entrada en el límite del método, antes de que comience cualquier trabajo.

void Save(string path)
{
    if (path == null)
        throw new System.ArgumentNullException(nameof(path));
    System.Console.WriteLine(path);
}

Utilice nameof

Pase nameof(path) en lugar de una cadena escrita manualmente. De este modo, la excepción informa del nombre exacto del parámetro y sigue siendo correcta si cambia el nombre del parámetro.

Esto facilita mucho la depuración cuando se registra la excepción.

void Greet(string user)
{
    if (user is null)
        throw new System.ArgumentNullException(nameof(user));
    System.Console.WriteLine("Hi " + user);
}

Ayudante ThrowIfNull

Las versiones modernas de C# ofrecen ArgumentNullException.ThrowIfNull(arg). Comprueba si hay un valor null y produce automáticamente una excepción con el nombre correcto del parámetro.

Es conciso y el estilo de protección recomendado en el código .NET actual.

void Process(object data)
{
    System.ArgumentNullException.ThrowIfNull(data);
    System.Console.WriteLine("Processing");
}

Una protección ejecutable

Este programa muestra una protección que detecta un argumento null e informa de ello claramente, en lugar de producir un error más adelante.

Ejecútelo para ver el mensaje de excepción con el nombre del parámetro incorrecto.

using System;

class Program
{
    static void Print(string text)
    {
        ArgumentNullException.ThrowIfNull(text);
        Console.WriteLine(text);
    }

    static void Main()
    {
        try { Print(null); }
        catch (ArgumentNullException ex) { Console.WriteLine(ex.ParamName); }
    }
}

Proteger con ?? throw

Puede combinar la asignación y la protección utilizando ?? con throw. Así valida y almacena el valor en una sola línea.

Es un patrón habitual en los constructores al asignar un campo.

class Service
{
    private readonly string _name;
    public Service(string name)
        => _name = name ?? throw new System.ArgumentNullException(nameof(name));
}

Vacío frente a null

En las cadenas, null y vacío son problemas distintos. Utilice string.IsNullOrEmpty o string.IsNullOrWhiteSpace para detectar ambos a la vez.

Una ArgumentException (no ArgumentNullException) es adecuada para un valor vacío pero no null.

void SetName(string name)
{
    if (string.IsNullOrWhiteSpace(name))
        throw new System.ArgumentException("Name required", nameof(name));
}

Protegerse con patrones

Los patrones is null e is not null resultan claros y no pueden verse afectados por operadores de igualdad sobrecargados.

Prefiera is null a == null cuando un tipo pueda redefinir ==.

object value = null;
if (value is null)
    System.Console.WriteLine("It is null");
if (value is not null)
    System.Console.WriteLine("Has value");

Usar un valor predeterminado en lugar de producir un error

No todo null es un error. A veces, un valor predeterminado razonable es mejor que una excepción.

Utilice ?? cuando null sea aceptable y produzca una excepción solo cuando el valor sea realmente obligatorio.

string BuildPath(string folder)
{
    folder ??= "/tmp";
    return folder + "/file.txt";
}

Los tipos de referencia anulables ayudan

Con los tipos de referencia anulables habilitados, el compilador le avisa cuando podría desreferenciar un valor posiblemente null, lo que permite detectar errores antes de la ejecución.

Declarar string (no null) frente a string? (anulable) documenta su intención y orienta al analizador.

#nullable enable
string required = "ok";
string? optional = null;
System.Console.WriteLine(optional?.Length ?? 0);

Proteger y usar de forma segura

Una vez que se ha protegido al principio de un método, el resto del cuerpo puede utilizar el valor sin repetir comprobaciones de null.

Este programa protege el argumento y después lo utiliza con seguridad.

using System;

class Program
{
    static int Length(string s)
    {
        ArgumentNullException.ThrowIfNull(s);
        return s.Length;
    }

    static void Main()
    {
        Console.WriteLine(Length("hello"));
    }
}

Comprobación rápida

Compruebe cuánto ha comprendido sobre la protección contra null.

Resumen

Proteja los argumentos obligatorios al principio de un método. Utilice ArgumentNullException.ThrowIfNull o ?? throw junto con nameof para producir errores claros.

Utilice string.IsNullOrWhiteSpace para las cadenas vacías, los patrones is null para realizar comprobaciones seguras y ?? cuando sea aceptable utilizar un valor predeterminado en lugar de producir un error.

Preguntas frecuentes

¿La lección «Protegerse frente a valores nulos» es gratis?

Sí — el texto completo de «Protegerse frente a valores nulos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Protegerse frente a valores nulos»?

Validación y patrones Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Protegerse frente a valores nulos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Tipos de valor anulables
  2. Operador condicional de nulidad
  3. Operadores de fusión de nulidad
  4. Protegerse frente a valores nulos
← Volver a C# Academy