Tuple类的元组

posted at 2020.9.4 09:48 by 风信子

元组就是将一组松散的对象简单地组合在一起。元组比数组的灵活性略强,因为数组中所有元素的类型是统一的,而元组使用了泛型参数,使得每个元素的类型相互独立。元组不同于类和结构,类和结构是高度整合的数据类型,其中要实现各种复杂的功能。

.NET框架最早引入元组的概念,是通过Tuple类实现的,而且存在多个泛型版本,可容纳元素数量为1~8个。元组中将所有元素分配给Item*属性,其中*表示序号,例如Item1Item2Item3等。

创建元组实例有三种方法:

    (1) 直接调用泛型版本Tuple类构造函数。如:

  Tuple < int, long, char > t = new Tuple < int, long, char > ( 1000,20000L, ’p’ );

    (2) 直接调用Tuple类的Create方法,此方法为静态方法,格式如下:

    var k = Tuple.Create < byte, string > ( 255, ”full” );

    (3) Vaule Tuple的使用方法与Tuple类似。但VauleTuple是值类型,不需要分配堆内存,效率更优于Tuple类。ValueTuple支持初始化后仍然可以修改元素。它也得到C#语法的支持,可以用简洁的语法声明。如:

 ① var a = ( 100, ( byte ) 15, true );

 ② ValueTuple < string, string > b = ( “Jack”, ”Bob” );

 ③ ( long, uint) f = ( 123454321L, 7899 );

声明元组时,如果不使用变量名,则编译器会将元组中的各个字段自动解构为单独的变量,当然也可以用var关键字来声明。

C#语言的元组还支持将用户自定义的类型进行解构,即可以将某个类的属性解构为元组。做法是:在类型中定义一个公共方法,返回类型为void,方法命名为Deconstruct

元组的另一个作用充当方法的返回值。尤其是在一个方法中需要同时返回多个对象给调用方的时候,虽然可以使用out参数,但使用元组可以更简洁。

下面举一实例:

    (1)新建一个控制台应用程序项目。

    (2)定义一个返回三元组的方法。

       static (string, int, string) GetData()

       {

            return ("Test 1", 35, "Test 2");

       }

    (3) 调用上述方法,获取返回的元组后,不对字段重命名,直接输出。

               var k = GetData();

               Console.WriteLine("未对字段重命名:");

         Console.WriteLine("Item1 = {0}, Item2 = {1}, Item3 = {2}", k.Item1, k.Item2, k.Item3);

    (4)也可以在获取返回的元组后,对字段重命名。

           var (Mark1, Count, Mark2) = GetData();

           Console.WriteLine("\n对字段进行重命名:");

           Console.WriteLine($"{nameof(Mark1)}={Mark1},{nameof(Count)}={Count},        {nameof(Mark2)} = {Mark2}");

    (5)Program类中定义一个方法,在返回二元组时,重命名字段。

     static (int Number1, int Number2) GetNumbers()

  {

            Random rand = new Random();

            return (rand.Next(0, 1000), rand.Next(0, 1000));

     }

     (6)调用方法,获取返回的元组,并直接访问已经命名的字段。

     var d = GetNumbers();

Console.WriteLine("\n返回带重命名字段的元组:");

     Console.WriteLine($"{nameof(d.Number1)}={d.Number1}, {nameof(d.Number2)} = {d.Number2}");

    (7) 运行应用程序,控制台输出结果如图所示:

 

Tags: , , , , ,

IT技术

Add comment

  Country flag

biuquote
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading