Esse é um novo recurso do C # 7, que é um recurso muito bom frequentemente usado em conjunto com a correspondência de padrões. Esse recurso, e muitos mais, são anunciados no blog da equipe do C # Novidades no C # 7.0 .
O que a equipe tenta alcançar aqui é um código mais fluido. Você se lembra de alguns casos em que a lista de variáveis externas está ficando extremamente longa e sem uso? Apenas um exemplo 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*/ }
Vê o problema? É inútil ter todas essas variáveis de fora sentadas sem fazer nada. O número de linhas pode ser cortado pela metade 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*/ }
Não apenas o número de linhas é minimizado, mas também não há uma lista desnecessária de variáveis no escopo onde você não deseja tê-las. Isso evita que você use uma variável que não pretendia usar, mas que agora está visível para você.
Esse recurso também é útil com correspondência de padrões em switch
instruções, como neste código (que tem um comportamento diferente do código acima!):
switch (o)
{
case int i: { /*use i*/ break; }
case Guid g: { /*use g*/ break; }
case DateTime d: { /*use d*/ break; }
}