El operador “?.” en C# y VB.NET, más cerca - Code Variables -->
Code Variables Code Variables

Latest news

جاري التحميل ...

El operador “?.” en C# y VB.NET, más cerca


El operador “?.”, también llamado safe navigation operator, era la característica más demandada para el lenguaje C# en Uservoice, uno de los principales canales utilizado por Microsoft para obtener feedback e ideas a aplicar en nuevas versiones de sus productos, y parece que definitivamente se está considerando la posibilidad de incluir este útil azucarillo sintáctico tanto en C# como en VB.

Para los que no lo conozcáis, se trata de una construcción que permite acceder a propiedades de objetos sin temor a las null reference exceptions lanzadas cuando estos objetos son nulos.

Mejor veámoslo sobre un ejemplo. Imaginemos la siguiente clase, a la que damos uso un poco más abajo:
public class Person
{
public Person Father { get; set; }
public string Name { get; set; }
[...]
}

string name = me.Father.Father.Name;
Console.WriteLine("My grandpa’s name is: "+ name);
Obviamente, si la variable me contiene un nulo nuestra aplicación se detendría lanzándonos una cruel excepción. Y lo mismo ocurriría si el nulo lo encontramos en me.Father o en me.Father.Father, ¿verdad?

Por esta razón, lo habitual es proteger nuestras aplicaciones contra estos casos introduciendo comprobaciones en cada uno de los puntos para impedir la catástrofe y ofrecer un resultado razonable cuando aparezcan dichos valores nulos:
string name =  me != null && me.Father != null && me.Father.Father!= null 
? me.Father.Father.Name
: null;
Console.WriteLine("My grandpa’s name is: " + (name ?? "I don’t know"));
La característica que en palabras de Mads Torgersen (PM de C# en Microsoft) está siendo “seriamente considerada”, consistiría en añadir a los lenguajes C# y VB.NET un nuevo operador de navegación segura “?.” (interrogación punto) que se utilizaría en lugar del punto para navegar por grafos de objetos y, a diferencia de éste, retornaría null al encontrarse con un valor nulo durante la navegación.

Así, el código anterior podría escribirse de una forma bastante más limpia y legible:
var name = me?.Father?.Father?.Name; 
Console.WriteLine("My grandpa’s name is " + ( name ?? "I don’t know"));
En este caso da igual si el nulo está en me, en me.Father o en me.Father.Father: en todos ellos la expresión completa retornaría null.

Pero aún hay más: la inclusión de este operador no sólo se aplicaría a la navegación por propiedades, sino a otras construcciones del lenguaje como la invocación a métodos, evitando la excepción si el objeto sobre el que se actúa es nulo:
var myFamily = me?.GetFamily();
O también el acceso a valores mediante un índice:
var myMary = me?.Children?["mary"];
En definitiva, se trata de una característica muy interesante para simplificar nuestro código y hacerlo más legible. Según Torgersen, se va a prototipar durante los próximos meses, por lo que sería posible encontrarlo ya en la próxima versión de C#.

Fuentes:
Publicado en Variable not found.

Comments



If you like the content of our blog, we hope to stay in constant communication, just enter your email to subscribe to the blog's express mail to receive new blog updates, and you can send a message by clicking on the button next ...

إتصل بنا

About the site

author Code Variables  Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

Learn more ←

Blog visitors

Blog stats

All Copyrights Reserved

Code Variables

2019