0Pricing
C# Academy · Lección

Tipos de valor anulables

int? y la estructura Nullable

Tipos de valor anulables es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 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é usar tipos de valor anulables?

Los tipos de valor, como int, bool y DateTime, siempre contienen un valor. Un int tiene 0 como valor predeterminado, nunca «ningún valor».

A veces necesita representar datos ausentes, como un campo de encuesta sin responder o una columna vacía de una base de datos. Los tipos de valor anulables permiten que un tipo de valor también contenga null.

Declarar con int?

Agregue un ? después de un tipo de valor para convertirlo en anulable. int? puede contener cualquier número entero o null.

Esta es la forma más habitual de escribir tipos de valor anulables en el código C# cotidiano.

int? age = null;
int count = 5;
age = count;
System.Console.WriteLine(age);

Nullable<T> entre bastidores

La sintaxis ? es una abreviatura. int? es exactamente el mismo tipo que Nullable<int>.

Nullable<T> es una estructura que encapsula un tipo de valor y agrega un indicador para realizar el seguimiento de si hay un valor presente.

Nullable<int> a = 10;
int? b = 10;
System.Console.WriteLine(a == b);

HasValue y Value

Todo tipo anulable expone dos propiedades. HasValue es true cuando hay un valor presente y Value devuelve el valor subyacente.

Leer Value cuando HasValue es false lanza una InvalidOperationException, por lo que debe comprobarlo primero.

int? score = 42;
if (score.HasValue)
{
    System.Console.WriteLine(score.Value);
}

Un ejemplo completo

A continuación se muestra un programa completo. Asigna un valor, comprueba HasValue e imprime el resultado.

Ejécutelo para ver cómo se comporta un tipo anulable cuando contiene datos.

using System;

class Program
{
    static void Main()
    {
        int? temperature = 21;
        if (temperature.HasValue)
            Console.WriteLine("Temp: " + temperature.Value);
        else
            Console.WriteLine("No reading");
    }
}

Cuando es null

Asignar null hace que HasValue devuelva false. A continuación se ejecuta la rama else.

Este patrón permite gestionar de forma segura las lecturas opcionales sin que se produzca un error.

using System;

class Program
{
    static void Main()
    {
        int? temperature = null;
        if (temperature.HasValue)
            Console.WriteLine(temperature.Value);
        else
            Console.WriteLine("No reading");
    }
}

GetValueOrDefault

GetValueOrDefault() devuelve el valor si está presente; de lo contrario, devuelve el valor predeterminado de ese tipo (como 0 para int).

También puede proporcionar su propio valor alternativo: GetValueOrDefault(100) devuelve 100 cuando el valor es null.

int? quantity = null;
int result = quantity.GetValueOrDefault(100);
System.Console.WriteLine(result);

Conversión implícita a anulable

Un int normal se convierte automáticamente en int?, porque todo valor normal también es un valor anulable válido.

Lo contrario no ocurre automáticamente: pasar de int? a int requiere una conversión explícita o un valor alternativo, ya que el tipo anulable podría ser null.

int plain = 7;
int? wrapped = plain;
int back = (int)wrapped;
System.Console.WriteLine(back);

Tipos anulables con otros tipos de valor

Puede utilizarse cualquier tipo de valor: bool?, double?, DateTime? e incluso estructuras personalizadas.

Un bool? tiene tres estados: true, false y null, lo que resulta útil para preguntas de sí o no que aún no se han respondido.

bool? agreed = null;
double? price = 9.99;
System.Console.WriteLine(agreed.HasValue);
System.Console.WriteLine(price.Value);

Los tipos de referencia ya admiten null

Las clases como string y los arrays ya pueden ser null, por lo que no necesitan el contenedor Nullable<T>.

El signo ? en los tipos de referencia, como string?, tiene un significado distinto: es una anotación de referencia anulable, no la estructura Nullable<T>.

Comparación de tipos anulables

Las comparaciones funcionan, pero recuerde que null se comporta de forma especial. Dos valores null son iguales, y cualquier comparación ordenada que incluya null devuelve false.

Por tanto, null < 5 es false, y null > 5 también es false.

int? x = null;
System.Console.WriteLine(x < 5);
System.Console.WriteLine(x == null);

Comprobación rápida

Compruebe cuánto ha comprendido sobre los tipos de valor anulables.

Resumen

Los tipos de valor anulables permiten que los tipos de valor también contengan null. Se escriben como int?, que equivale a Nullable<int>.

Utilice HasValue para comprobar si hay un valor, Value para leerlo (solo cuando esté presente) y GetValueOrDefault() para obtener un valor alternativo seguro. Los tipos de referencia ya admiten null por sí mismos.

Preguntas frecuentes

¿La lección «Tipos de valor anulables» es gratis?

Sí — el texto completo de «Tipos de valor anulables» 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 «Tipos de valor anulables»?

int? y la estructura Nullable 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 1 de 4.

¿Cuánto tiempo toma la lección «Tipos de valor anulables»?

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