C# 7.0 "деконструктор"


Я читаю о C# 7.0 new stuff, и я не могу понять, по крайней мере из приведенного примера, что будет использоваться для "деконструктора".

Это просто синтаксический сахар?

Если бы кто - нибудь мог пролить свет на это, было бы неплохо.
1 7

1 ответ:

Это часть нового синтаксиса кортежей , который не имеет ничего общего с классами кортежей, но заимствован из функционального программирования.

Рассмотрим этот класс:

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}";

Обновить


Еще один пример, для которого он может быть использован, и это просто спекуляции, я не пробовал это, вместе с сопоставлением паттернов.

var users = new Dictionary<string, User>
{
    {"john", new User("jom", "John", "Malkovich") }
}

С# 6

User user;
users.TryGetValue("john", out user);

C# 7 pattern matching

users.TryGetValue("john", out User user);

C# 7 deconstruct

users.TryGetValue("john", out (username, firstname, lastname));