元组解构
可以将元组分解为变量。为此,只需要从前面的代码示例中删除元组变量,并在括号中定义变量名。然后可以直接访问变量,其中包含元组部分的值:.
private static void TupleDeconstruction()
{
(string s, int i, Person p) = ("magic", 42, new Person("Stephanie",
"Nagel"));
Console.WriteLine($"s: {s}, i: {i}, p: {p}");
//...
}
private static void TupleDeconstruction()
{
//...
(var s1, var i1, var pl) = ("magic", 42, new Person("Stephanie", "Nagel"));
Console.WriteLine($"s: {s1}, i: {il}, p: {pl}");
string s2;
int i2;
Person p2;
(s2, i2, p2) = ("magic", 42, new Person("Katharina", "Nagel"));
Console.WriteLine($"s: {s2},i: {i2},p: {p2}");
//...
}
如果不需要元组的所有部分,可以使用_忽略该部分,如下所示:
private static void TupleDeconstruction()
{
//...
(string s3, _, _) = ("magic", 42, new Person("Katharina", "Nagel"));
Console.WriteLine(s3);
}
注意
在不需要结果的情况下,使用 out 参数修饰符调用方法时,可能已经使用了_。在这个场景中,使用_只是一个命名约定。给元组使用_是不同的。不需要声明类型,_可以使用多次;它是一个编译器特性、解构时可以忽略这部分。
元组的返回
下面介绍一个更有用的示例:返回元组的方法。在下面的代码片段中,Divide 方法接收两个参数,并返回一个由两个 int 值组成的元组。结果用一个元组字面量返回:
static (int result, int remainder) Divide(int dividend, int divisor)
{
int result = dividend / divisor;
int remainder = dividend % divisor;
return (result, remainder);
}
结果分解为 result 和 remainder 变量:
private static void ReturningTuples()
{
(int result, int remainder) = Divide(7, 2);
Console.WriteLine($"7 / 2 - result: {result}, remainder: {remainder}");
}
注意
使用元组,可以避免通过 out 参数声明方法签名。out 参数不能与 async 方法一起使用;此限制不适用去元组。