元组解构
可以将元组分解为变量。为此,只需要从前面的代码示例中删除元组变量,并在括号中定义变量名。然后可以直接访问变量,其中包含元组部分的值:.
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 方法一起使用;此限制不适用去元组。
