C# 7.0「デコンストラクター」質問する

C# 7.0「デコンストラクター」質問する

私は読んでいますC# 7.0 の新機能、そして、少なくとも示された例からは、「デコンストラクター」の使用法が何であるかを理解することができません。

それは単なる構文糖ですか?

誰かがそれについて何か明らかにしてくれると嬉しいです。

ベストアンサー1

これは新しいタプル構文の一部であり、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}";

アップデート


他にも、パターン マッチングと組み合わせて使用​​する例がありますが、これは単なる推測であり、試したことはありません。

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

C# 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));    

おすすめ記事