0%

C#元组


元组(Tuple)早就在C#中出现过,但直到7.0后,其才能真正发挥应有的作用。
这里的元组,便是指C#7.0以后的元组。


何谓元组

元组,从名字可以看出,是一堆数据的“组”。这些数据可能会有内在的联系,所以被分在一个组内,便于统一管理。
不妨考虑下面这个例子。
程序中,我们需要储存某些个人信息,那么可以用如下变量来表示:

1
2
3
4
5
6
string name;
string job;
string country;
Sex sex;
int age;
......

这写起来很繁琐,而且这些数据无法直接体现其内在联系。不妨看看用元组会是什么样子:

1
(string name, string job, string country, Sex sex, int age) people;

甚至可以再度简写为:

1
(string, string, string, Sex, int) people;

这样,便可以通过一个变量people来获取相应数据。

元组使用

声明

元组的声明有多种方式,下面我只写出我常用的几种。

用元组类型声明

1
2
(string name, string job, string country, Sex sex, int age) people;
(string, string, string, Sex, int) people;

用Var类型声明

1
2
var people = (Name: "Jack", Job: "ASAF A level Number", Country: "USA", Gender: Sex.Male, Age: 33);
var people = ("Jack", "ASAF A level Number", "USA", Sex.Male, 33);

其中上面两种中,第一个都是具名元组

调用

元组的调用和类很像,可以把其中的数据看作元组的成员。
无论是否为具名元组,都可以用如下方法调用:

1
2
3
string name = people.Item1;
string job = people.Item2;
......

若是具名元组,还可以用对应的名字获取数据。

1
2
3
string name = people.Name;
string job = people.Job;
......

推荐用PascalCase命名法命名元组每一项的名字。

返回值

元组其中一个重要应用便是作为返回值,可以一次返回多个不同的数据。
看如下的例子:

1
2
3
4
5
6
7
8
9
10
11
12
public (string, string, string, Sex, int) GetPeopleInformation()
{
string name;
string job;
string country;
Sex sex;
int age;

//获取输入

return (name, job, country, sex, age);
}

这样便实现了多个值的返回。
相比于使用大量的out,元组显然更加优越。

元组的其他应用

元组因为其特殊的构造,在C#中有很为广泛的应用。
比如我上一篇 中,便是用元组的Equals方法作为Vector2类Equals方法的判断。


-------------End-------------