私は読んでいます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));