I disagree. Automatic destructuring like this can be fantastic. Sure, if you're just destructuring a variable there's not much gain. But this is much smoother:
var (f, l) = SomeMethodReturningAPerson();
than:
var person = SomeMethodReturningAPerson();
var (f, l) = (person.FirstName, person.LastName);
or:
foreach(var (f, l) in enumerationOfPersons) { ... }
compared to:
foreach(var person in enumerationOfPersons)
{
var (f, l) = (person.FirstName, person.LastName);
...
}
When you know what you want to compute, but have to throw in extra temporary variables it becomes tedious and error prone. Cut straight to the thing you want (the names themselves in this case), eliminate middlemen.