Это часть нового синтаксиса кортежа - который не имеет ничего общего с уроками Tuple <>, но от функционального программирования.
Рассмотрим этот класс:
public class User
{
public string Username { get; }
public string FirstName { get; }
public string LastName { get; }
public User(string username, string firstName, string lastName)
{
// initialize properties
}
public void Deconstruct(out string username, out string firstName, out string lastName)
{
// initialize out parameters
}
}
Использование:
var user = new User("foobaa", "foo", "baa");
Вместо
var username = user.Username;
var firstName = user.FirstName;
var lastName = user.LastName;
или
string username, firstName, lastName;
user.Deconstruct(out username, out firstName, out lastName);
Вы можете написать:
var (username, firstName, lastName) = user;
var fullName = $"{firstName} {lastName}";
Update
Другой пример, который может быть использован для, и это только предположения, я не пробовал, это вместе с сопоставления с образцом.
var users = new Dictionary<string, User>
{
{"john", new User("jom", "John", "Malkovich") }
}
С # 6
User user;
users.TryGetValue("john", out user);
C# 7 шаблону
users.TryGetValue("john", out User user);
C# 7 деконструировать
users.TryGetValue("john", out (username, firstname, lastname));
Что неясно? Что касается синтаксического сахара: на нем ссылается ссылка: «Очевидно, вы можете вызвать метод Deconstruct, как и в C# 1.0. Однако C# 7.0 обеспечивает синтаксический сахар, который значительно упрощает вызов». –
Не нужно беспокоиться об этом, это в значительной степени автоматическое. Вскоре после того, как вы начнете работать с новым синтаксисом кортежа, вы найдете применение для этого сахара. –
Кажется, что в C# добавлен новый синтаксис только для контроля четности функции с другими языками, но добавление сомнительной ценности и отсутствие намерения сделать яснее. –