一个非常最有争议的的C#语法Tuple

写过Python的同学都知道,很多Python开源项目都大量使用元组语法,C#也是支持这个语法,今天就一起来聊聊这个语法:Tuple。

01Tuple简介

是一种非常有用的数据结构,元组功能提供了简洁的语法来将多个数据元素分组成一个轻型数据结构。

下面代码示例:如何声明元组变量、对它进行初始化并访问其数据成员:.

Tuple<int, string> tuple = new Tuple<int, string>(1, "hello");int num = tuple.Item1;string str = tuple.Item2;Console.WriteLine(num); //输出 1Console.WriteLine(str); //输出 hello

在C#中,根据我们声明的元素个数,我们可以通过Item1、Item2,访问器数据成员。

02Tuple使用场景

Tuple比较常用的2个场景:

1、我们在编写代码中,对于需要返回多个参数的方法,我们一般会借助out 方法参数,使用Tuple可以更加直观;

2、无需单独定义类,用于方法的返回、方法参数。

下面是Tuple与out使用示例对比:

out示例:遍历一个int列表List,返回元素值不为0的总个数,以及元素相加的值。

int Fun1(List<int> list, out int result){    int count = 0;    result = 0;    foreach (var item in list)    {        result += item;
        if(item!=0)        {            count++;        }    }
    return count;}
var list = new List<int>() { 1, 0, 5, 7, 9 };int result;var count = Fun1(list, out result);

Tuple示例:遍历一个int列表List,返回元素值不为0的总个数,以及元素相加的值。

Tuple<int, int> Fun1(List<int> list){    int count = 0;    int result = 0;    foreach (var item in list)    {        result += item;
        if (item != 0)        {            count++;        }    }
    return new Tuple<int, int>(count, result);}
var list = new List<int>() { 1, 0, 5, 7, 9 };var resutl = Fun1(list);Console.WriteLine(resutl.Item1);Console.WriteLine(resutl.Item2);

03Tuple优缺点

优点:

方便:元组可以非常方便地存储一组相关的数据,而无需创建自定义的类。

无需创建类:使用元组时,无需创建额外的类来存储一组数据。这对于只需要临时存储一些数据的情况非常有用。

灵活:元组可以包含不同类型、数量的元素,这使得它们非常灵活。

缺点:

不可变性:元组是不可变的,这意味着一旦创建了元组,就不能更改其内容,没有自定义类方便。

代码可读性差:元组中的元素使用默认的命名,如“Item1”、“Item2”等。使用自定义类,调用者可以通过类的属性名称,理解每个属性的用途,而元组是采用默认命名,容易让代码会变得混乱和难以理解,特别是元组元素数量较多的情况。

04最后

Tuple还是要有节制性的使用,我个人比较习惯用在替换内部类的场景下,使用原则:尽量是内部方法、内部类等一些较少需要沟通的场景,尽量避免用在对外的接口。

对于元组这个语法,你喜欢吗,都用在什么场景下,欢迎留言区评论!