En el desarrollo de software, una buena práctica antes de invocar a los miembros de un objeto es comprobar si el mismo fue instanciado correctamente. Para esto, comprobamos si su valor es diferente de null
, si es verdadero, podemos usar sus miembros. De esta forma, evitamos que el compilador genere una excepción de tipo NullReferenceException
, que detendría la ejecución del programa.
El Operador Condicional ?. es una forma abreviada de comprobar si el valor de un objeto es null
, antes de tener acceso a sus miembros y hacer uso de ellos. La sintaxis es la siguiente:
Objeto?.Miembro
Que es equivalente a:
if (Objeto != null) Objeto.Miembro
En el siguiente ejemplo tenemos una clase llamada Persona
, con una sola propiedad: Nombre
. El método MostrarNombre
muestra en pantalla el nombre de la persona.
static void MostrarNombre(Persona persona) { if (persona != null) Console.WriteLine(persona.Nombre); }
Con el uso del operador condicional null
el resultado es el mismo:
static void MostrarNombre(Persona persona) { Console.WriteLine(persona?.Nombre); }
Podemos también usar múltiples operadores condicionales de forma combinada. El siguiente código es valido:
static void MostrarCiudadDireccion(Persona persona) { Console.WriteLine(persona?.Direccion?.Ciudad); }
En el caso de que persona sea null
, el operador ?.
no permite el acceso a Direccion
ni Ciudad
.