当我们在编写方法时需要返回多个值时,往往可以将这些值封装成一个类或结构体返回,但是如果只是为了返回几个简单的值,这样会显得过于繁琐。而C#7.0新增了一种基于Tuple的多返回值方法,可以让我们更方便地返回多个值。
Tuple 简介
Tuple(元组)是一种简单的数据结构,它可以轻松地封装一组不同类型的值,并使用点符号来访问每个值。Tuple 最初是在 .NET Framework 4.0 中引入的,而 C# 7.0 则对其进行了进一步的增强,使其更方便实用。
在 C# 7.0 之前,如果我们需要一个方法返回多个值,通常采用如下两种方式:
- 定义一个 struct 或 class 用来封装多个值,返回该结构体或类的实例;
- 通过“输出形参”将多个值作为方法的输出参数返回。
以上两种方式,在一些只需要返回简单且类型不同的几个值的场景下,可能会显得过于繁琐。Tuple 则可以很方便地解决这个问题。
基于 Tuple 的多返回值方法
在 C# 7.0 中,我们可以在方法定义时使用 Tuple 来声明方法返回多个值。具体实现方式如下:
public static (int, string) GetName()
{
int id = 1;
string name = "alex";
return (id, name);
}
在这个示例中,我们定义了一个 GetName 方法,该方法返回两个值:int 类型的 id 和 string 类型的 name。在方法的定义中,我们使用 (int, string) 来表示我们希望返回的是一个包含 int 和 string 两个元素的 Tuple。在方法的实现中,我们先声明了两个变量 id 和 name,并将它们赋上了返回值。最后我们使用括号将这两个变量括起来,构成了一个 Tuple,并通过 return 返回。
可以注意到,“(int, string)”其实也可以写成“ValueTuple
在调用该方法时,我们可以如下面示例代码一样获取到返回值:
var tuple = GetName();
int id = tuple.Item1;
string name = tuple.Item2;
或者,我们也可以将元素通过 deconstruction 模式进行解构:
(int id, string name) = GetName();
// 或直接
var (id, name) = GetName();
在以上两个示例中,“Item1”和 “Item2”分别对应 Tuple 中的第一个元素和第二个元素。而使用 deconstruction 模式进行解构后,我们通过两个变量“id”和“name”分别获取了 Tuple 中的元素。
示例
接下来我们可以通过如下两个示例进一步了解 Tuple:
示例一:返回多个值并使用 deconstruction 模式进行解构
下面的代码演示了一个方法,该方法通过 Tuple 返回了一个 string 类型的名称和 int 类型的年龄,而在方法调用的时候则通过 deconstruction 模式进行了解构,获取到了每个是值。请看代码:
public static (string, int) GetNameAndAge()
{
string name = "alex";
int age = 18;
return (name, age);
}
public static void TestGetNameAndAge()
{
(string name, int age) = GetNameAndAge();
Console.WriteLine($"Name: {name}, Age: {age}");
}
在调用 GetNameAndAge 方法时,我们使用 (string, int) 来为 Tuple 声明了两个元素,然后在方法的最后使用这两个元素创建了一个 Tuple 并返回。
在 TestGetNameAndAge 方法中,我们通过 (string name, int age) 来声明了私有变量 name 和 age,然后通过 GetNameAndAge 方法,并使用“=”将方法的返回值 Deconstruction,从而将返回值中的元素直接自动放入到对应的变量中。最后使用 Console.WriteLine 输出获取的值。
示例二:将 Tuple 作为方法参数
在下面的代码示例中,我们可以看到将 Tuple 作为方法的形参。具体实现如下:
public static void PrintTuple((int, string) tuple)
{
Console.WriteLine($"Id: {tuple.Item1}, Name: {tuple.Item2}");
}
public static void TestPrintTuple()
{
var tuple = (1, "alex");
PrintTuple(tuple);
}
在 PrintTuple 方法中,我们定义了一个参数类型为 (int, string) 的 Tuple。而在 TestPrintTuple 方法中,我们通过 (1, "alex") 创建了一个 Tuple 并将其作为 PrintTuple 的参数。在 PrintTuple 方法内部,我们可以使用 Item1 和 Item2 来获取到 Tuple 的两个元素。
以上就是基于 Tuple 的多返回值方法的完整攻略,介绍了 Tuple 的基本特性以及 C# 7.0 中如何使用 Tuple 实现多返回值方法的定义和调用,并提供了两个示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 7.0 新特性1之基于Tuple的“多”返回值方法 - Python技术站