Vamos a ver un resumen de algunas de la novedades que trae C#7.
Variable de salida:
Hasta hoy si queríamos usar una variable de salida (out) por ejemplo en un TryParse, hacíamos así:
int i = 0; string s = "10"; if(int.TryParse(s, out i)) { //hacer algo }
No está mal, una vez confirmado el if podemos usar el valor en i, con C#7 podemos hacerlo de una manera más resumida
string s = "10"; if(int.TryParse(s, out int i)) { //hacer algo }
Nos ahorramos la declaración de i por fuera del if, sin embargo dentro del if tenemos acceso a i.
Pattern matching
Esta característica es mucho más potente, nos permite hacer varias cosas, vamos a ver una de las que más me llama la atención, usar tipos en los switch
switch(shape) { case Circle c: WriteLine($"circle with radius {c.Radius}"); break; case Rectangle s when (s.Length == s.Height): WriteLine($"{s.Length} x {s.Height} square"); break; case Rectangle r: WriteLine($"{r.Length} x {r.Height} rectangle"); break; default: WriteLine(""); break; case null: throw new ArgumentNullException(nameof(shape)); }
Como vemos podemos hacer un switch y poner tipos en los case, incluso con condiciones dentro de los mismos, obviamete las condiciones se evalúan solo si el tipo coincide, genial.
Notemos que incluso se evalúa null como un tipo, no nos confundamos a pesar de que el default está antes del null siempre se evalúa defaul en último lugar.
Sin llegar a usar un case podemos hacer otras cosas interesantes como ésta
if ((shape is Rectangle s) && s.Width == s.Length)
Básicamente evaluamos si shape es del tipo Rectangle y si lo es asignamos el resultado de la igualación de tipos a la variable s, nuevamente, el scope de la variable es el if. Muy bueno.
Y hay más
Hay otras funcionalidades que se agregan a C# y otras que están planificadas, hay una buena lista acá.
Seguramente iremos viendo más en la medida que estén disponibles.
Nos leemos.