C# 7.0 "деконструктор"
Я читаю о C# 7.0 new stuff, и я не могу понять, по крайней мере из приведенного примера, что будет использоваться для "деконструктора".
Это просто синтаксический сахар?
Если бы кто - нибудь мог пролить свет на это, было бы неплохо.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));