C# 元组解构及元组的返回

元组解构

可以将元组分解为变量。为此,只需要从前面的代码示例中删除元组变量,并在括号中定义变量名。然后可以直接访问变量,其中包含元组部分的值:.

private static void TupleDeconstruction(){  (string s, int i, Person p) = ("magic", 42, new Person("Stephanie",    "Nagel"));  Console.WriteLine($"s: {s}, i: {i}, p: {p}");  //...}
还可以使用 var 关键字声明解构的变量;类型由元组字面量定义。还可以在初始化之前声明变量,并将元组分解为现有变量:
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 方法一起使用;此限制不适用去元组。