元组(Tuple)早就在C#中出现过,但直到7.0后,其才能真正发挥应有的作用。
这里的元组,便是指C#7.0以后的元组。
何谓元组
元组,从名字可以看出,是一堆数据的“组”。这些数据可能会有内在的联系,所以被分在一个组内,便于统一管理。
不妨考虑下面这个例子。
程序中,我们需要储存某些个人信息,那么可以用如下变量来表示:
1 | string name; |
这写起来很繁琐,而且这些数据无法直接体现其内在联系。不妨看看用元组会是什么样子:
1 | (string name, string job, string country, Sex sex, int age) people; |
甚至可以再度简写为:
1 | (string, string, string, Sex, int) people; |
这样,便可以通过一个变量people
来获取相应数据。
元组使用
声明
元组的声明有多种方式,下面我只写出我常用的几种。
用元组类型声明。
1 | (string name, string job, string country, Sex sex, int age) people; |
用Var类型声明。
1 | var people = (Name: "Jack", Job: "ASAF A level Number", Country: "USA", Gender: Sex.Male, Age: 33); |
其中上面两种中,第一个都是具名元组。
调用
元组的调用和类很像,可以把其中的数据看作元组的成员。
无论是否为具名元组,都可以用如下方法调用:
1 | string name = people.Item1; |
若是具名元组,还可以用对应的名字获取数据。
1 | string name = people.Name; |
推荐用PascalCase命名法命名元组每一项的名字。
返回值
元组其中一个重要应用便是作为返回值,可以一次返回多个不同的数据。
看如下的例子:
1 | public (string, string, string, Sex, int) GetPeopleInformation() |
这样便实现了多个值的返回。
相比于使用大量的out
,元组显然更加优越。
元组的其他应用
元组因为其特殊的构造,在C#中有很为广泛的应用。
比如我上一篇 中,便是用元组的Equals
方法作为Vector2类Equals
方法的判断。