C#解构教程展示了如何执行解构操作:从C#中的类型中解包变量。C#教程是C#语言的综合教程。
解构是将类型拆包成单个部分;例如,将元组放入其项目或将类放入其属性。
C#解构元组
在下一个示例中,我们将元组解构为项。
var user = ("John", "Doe", "gardener");
var (firstName, lastName, occupation) = user;
Console.WriteLine(firstName);
Console.WriteLine(lastName);
Console.WriteLine(occupation);
Console.WriteLine("-----------------");
var (fn, ln, oc) = getUser();
Console.WriteLine(fn);
Console.WriteLine(ln);
Console.WriteLine(oc);
(string, string, string) getUser()
{
var fname = "John";
var lname = "Doe";
var occupation = "gardener";
return (fname, lname, occupation);
}
一个用户元组有三个项目;这些项目被解压到单独的变量中。
var (firstName, lastName, occupation) = user;
在这里,我们进行解构操作;
$ dotnet-script tuple_dec.csx John Doe gardener ----------------- John Doe gardener
丢弃物可用于不需要的物品。
var user = ("John", "Doe", "gardener");
var (fname, lname, _) = user;
Console.WriteLine($"{fname} {lname}")
在这个程序中,我们对第三个值使用丢弃。
C#解构字典
字典由键/值对组成。这些对可以解包为两个单独的变量。
var domains = new Dictionary<string, string>
{
{"sk", "Slovakia"},
{"ru", "Russia"},
{"de", "Germany"},
{"no", "Norway"}
};
foreach ((string k, string v) in domains)
{
Console.WriteLine($"{k}: {v}");
}
在foreach循环中,我们将每一对解压缩为k和v变量。
$ dotnet-script dict_dec.csx sk: Slovakia ru: Russia de: Germany no: Norway
C#解构类
要解构类,我们必须实现Deconstruct方法。
var u = new User("John", "Doe", "gardener");
var (fname, lname, occupation) = u;
Console.WriteLine($"{fname} {lname} is a(n) {occupation}");
var (fn, ln) = u;
Console.WriteLine($"{fn} {ln}");
class User
{
string FirstName { get; set; }
string LastName { get; set; }
string Occupation { get; set; }
public User(string fname, string lname, string occupation)
{
FirstName = fname;
LastName = lname;
Occupation = occupation;
}
public void Deconstruct(out string fname, out string lname)
{
fname = FirstName;
lname = LastName;
}
public void Deconstruct(out string fname, out string lname,
out string occupation)
{
fname = FirstName;
lname = LastName;
occupation = Occupation;
}
}
我们可以有多个Deconstruct方法。
var u = new User("John", "Doe", "gardener");
var (fname, lname, occupation) = u;
在这里,我们将User类型解构为三个变量。
var (fn, ln) = u;
Console.WriteLine($"{fn} {ln}");
在这里,我们将用户解构为两个变量。
public void Deconstruct(out string fname, out string lname)
{
fname = FirstName;
lname = LastName;
}
被解构的变量有out修饰符。
$ dotnet-script class_dec.csx John Doe is a(n) gardener John Doe
C#解构记录
带有位置参数的记录类型被自动解构;编译器为我们创建了Deconstruct方法。
var user = new User("John", "Doe", "gardener");
var (firstName, lastName, occupation) = user;
Console.WriteLine($"{firstName} {lastName} is a(n) {occupation}");
record User(string FirstName, string LastName, string Occupation);
在示例中,我们解压了User记录。
C#解构扩展方法
在下一个示例中,我们创建一个Deconstruct扩展方法。
var dt = new DateTime(2021, 9, 16);
(int year, int month, int day) = dt;
Console.WriteLine(year);
Console.WriteLine(month);
Console.WriteLine(day);
public static class MyExtension
{
public static void Deconstruct(this DateTime dateTime, out int year,
out int month, out int day)
{
year = dateTime.Year;
month = dateTime.Month;
day = dateTime.Day;
}
}
程序为DateTime类型定义了一个Deconstruct方法;它将类型解包为年、月和日部分。
$ dotnet run 2021 9 16
在本文中,我们使用了C#中的解构操作。
列出所有C#教程。
