Esa es una nueva característica de C # 7, que es una característica muy agradable que se usa a menudo junto con la coincidencia de patrones. Esta característica, y muchas más, se anuncian en el blog del equipo de C # Novedades de C # 7.0 .
Lo que el equipo intenta lograr aquí es un código más fluido. ¿Recuerda algunos casos en los que la lista de variables de salida se está volviendo extremadamente larga sin uso? Solo un ejemplo rápido:
int i;
Guid g;
DateTime d;
if (int.TryParse(o, out i)) { /*use i*/ }
else if (Guid.TryParse(o, out g)) { /*use g*/ }
else if (DateTime.TryParse(o, out d)) { /*use d*/ }
¿Ves el problema? Es inútil tener todas esas variables ahí sentadas sin hacer nada. El número de líneas se puede reducir a la mitad usando C # 7:
if (int.TryParse(o, out int i)) { /*use i*/ }
else if (Guid.TryParse(o, out Guid g)) { /*use g*/ }
else if (DateTime.TryParse(o, out DateTime d)) { /*use d*/ }
No solo se minimiza el número de líneas, tampoco hay una lista innecesaria de variables en el alcance donde no desea tenerlas. Esto le impide utilizar una variable que no tenía la intención de utilizar, pero que ahora está visible.
Esta característica también es útil con la coincidencia de patrones en switch
declaraciones, como en este código (¡que tiene un comportamiento diferente al código anterior!):
switch (o)
{
case int i: { /*use i*/ break; }
case Guid g: { /*use g*/ break; }
case DateTime d: { /*use d*/ break; }
}