Questa è una nuova funzionalità di C # 7, che è una funzionalità molto interessante spesso utilizzata insieme alla corrispondenza dei modelli. Questa funzionalità e molte altre sono annunciate nel blog del team di C # Novità di C # 7.0 .
La cosa che il team cerca di ottenere qui è un codice più fluido. Ricordi alcuni casi in cui l'elenco delle variabili out diventa estremamente lungo e inutile? Solo un rapido esempio:
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*/ }
Vedi il problema? È inutile che tutte quelle variabili esterne non facciano nulla. Il numero di righe può essere dimezzato utilizzando 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*/ }
Non solo il numero di righe è ridotto al minimo, non c'è nemmeno un elenco inutile di variabili nell'ambito di cui non si desidera averle. Ciò ti impedisce di utilizzare una variabile che non intendevi utilizzare, ma che ora è visibile.
Questa funzione è utile anche con la corrispondenza dei modelli nelle switch
istruzioni, come in questo codice (che ha un comportamento diverso dal codice sopra!):
switch (o)
{
case int i: { /*use i*/ break; }
case Guid g: { /*use g*/ break; }
case DateTime d: { /*use d*/ break; }
}