C'est une nouvelle fonctionnalité de C # 7, qui est une fonctionnalité très intéressante souvent utilisée en conjonction avec la correspondance de motifs. Cette fonctionnalité, et bien d'autres, est annoncée dans le blog de l'équipe C # What's New in C # 7.0 .
Ce que l'équipe essaie de réaliser ici, c'est un code plus fluide. Vous souvenez-vous de certains cas où la liste des variables out devient extrêmement longue sans aucune utilité? Juste un exemple rapide:
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*/ }
Vous voyez le problème? Il est inutile d'avoir toutes ces variables out assis là à ne rien faire. Le nombre de lignes peut être réduit de moitié en utilisant 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 seulement le nombre de lignes est minimisé, mais il n'y a pas non plus de liste inutile de variables dans la portée où vous ne voulez pas les avoir. Cela vous empêche d'utiliser une variable que vous n'aviez pas l'intention d'utiliser, mais qui vous est désormais visible.
Cette fonctionnalité est également utile avec la correspondance de modèle dans les switch
instructions, comme dans ce code (qui a un comportement différent du code ci-dessus!):
switch (o)
{
case int i: { /*use i*/ break; }
case Guid g: { /*use g*/ break; }
case DateTime d: { /*use d*/ break; }
}