Operador condicional de nulidad
Acceso seguro con ?.
Operador condicional de nulidad es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 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.
El problema de las cadenas de null
Acceder a un miembro mediante una referencia null produce una NullReferenceException. Es uno de los errores de ejecución más comunes en C#.
Cuando encadena llamadas como user.Address.City, cualquier elemento de la cadena podría ser null, y la solución tradicional consistía en usar una torre de comprobaciones con if.
Conozca ?.
El operador condicional de null ?. omite el resto de la expresión. Si el lado izquierdo es null, el resultado es null en lugar de producir una excepción.
Se interpreta así: «acceda a este miembro, pero solo si el objeto no es null».
string name = null;
int? length = name?.Length;
System.Console.WriteLine(length == null);El resultado se vuelve anulable
Como ?. puede producir null, el tipo del resultado se vuelve anulable. name?.Length es int?, no int.
Por eso debe almacenarlo en un int? y no en un int normal.
string text = "hello";
int? len = text?.Length;
System.Console.WriteLine(len);Una demostración ejecutable
Este programa muestra que ?. devuelve un valor cuando el objeto existe y null cuando no existe.
Ejecútelo y observe que nunca se produce una excepción.
using System;
class Program
{
static void Main()
{
string a = "world";
string b = null;
Console.WriteLine(a?.ToUpper());
Console.WriteLine(b?.ToUpper() ?? "(null)");
}
}Encadenar varios ?.
Puede encadenar ?. en varios miembros. En cuanto cualquier parte es null, toda la cadena se detiene y devuelve null.
Por tanto, customer?.Order?.Total es seguro incluso si customer u Order es null.
string s = null;
int? upperLen = s?.ToUpper()?.Length;
System.Console.WriteLine(upperLen == null);Indexer condicional de null ?[]
Existe una forma de indexador, ?[], para arrays y listas. Si la colección es null, el acceso mediante el índice devuelve null en lugar de producir un error.
Nota: protege frente a que la colección sea null, pero no frente a un índice fuera de rango.
int[] data = null;
int? first = data?[0];
System.Console.WriteLine(first == null);Llamar a métodos de forma segura
?. también protege las llamadas a métodos. list?.Clear() llama a Clear solo si list no es null; de lo contrario, no hace nada.
Si el método devuelve void, toda la instrucción simplemente no hace nada cuando el valor es null.
System.Collections.Generic.List<int> list = null;
list?.Add(5);
System.Console.WriteLine("No crash");Activación de eventos segura para subprocesos
Un uso clásico consiste en activar eventos. SomeEvent?.Invoke(this, args) activa el evento de forma segura solo cuando hay al menos un controlador suscrito.
Esto sustituyó al antiguo patrón de comprobación de null, que podía sufrir una condición de carrera entre la comprobación y la llamada.
System.Action handler = null;
handler?.Invoke();
System.Console.WriteLine("Invoked safely");Combinar con ??
?. se combina de forma natural con el operador de coalescencia nula ?? para proporcionar un valor alternativo cuando la cadena es null.
name?.Length ?? 0 devuelve la longitud o 0 si name es null.
string name = null;
int length = name?.Length ?? 0;
System.Console.WriteLine(length);Un detalle importante
Aunque el tipo de valor final no sea anulable, utilizar ?. hace que la expresión sea anulable. list?.Count es int?, no int.
Si necesita un int normal, añada ?? 0 o utilice GetValueOrDefault().
var list = new System.Collections.Generic.List<int> { 1, 2 };
int count = list?.Count ?? 0;
System.Console.WriteLine(count);Comparación completa
Este programa contrasta el enfoque detallado con if y la versión concisa con ?.. Ambos evitan la excepción, pero ?. resulta mucho más claro.
using System;
class Program
{
static void Main()
{
string s = null;
int len = s != null ? s.Length : -1;
Console.WriteLine(len);
Console.WriteLine(s?.Length ?? -1);
}
}Comprobación rápida
Compruebe cuánto ha comprendido sobre el operador condicional de null.
Resumen
El operador condicional de null ?. (y el indexador ?[]) detiene el acceso a un miembro cuando el objeto es null y devuelve null en lugar de producir una excepción.
El resultado se vuelve anulable, por lo que debe combinarlo con ?? para proporcionar un valor alternativo.
Preguntas frecuentes
¿La lección «Operador condicional de nulidad» es gratis?
Sí — el texto completo de «Operador condicional de nulidad» 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 «Operador condicional de nulidad»?
Acceso seguro con ?. 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 2 de 4.
¿Cuánto tiempo toma la lección «Operador condicional de nulidad»?
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
- Tipos de valor anulables
- Operador condicional de nulidad
- Operadores de fusión de nulidad
- Protegerse frente a valores nulos