3.11C#类型之元组(ValueTuple)值类型和元组(Tuple)引用类型

1.元组声明和初始化

元组提供了简洁的语法来将多个数据元素组合在一个轻型数据结构里。 通过声明 ( 和 ) 之间的成员的类型和名称来实例化元组。

(double, int) t1 = (4.5, 3);
Console.WriteLine($"Tuple with elements {t1.Item1} and {t1.Item2}.");
// 输出:Tuple with elements 4.5 and 3.

(double Sum, int Count) t2 = (4.5, 3);
Console.WriteLine($"Sum of {t2.Count} elements is {t2.Sum}.");
// 输出:Sum of 3 elements is 4.5.
(类型1, 类型2) 元组名 = (值1, 值2);
var 元组名 = (值1, 值2);
(类型1 字段名1, 类型2 字段名2) 元组名 = (值1, 值2);
var 元组名 = (字段名1: 值1, 字段名2: 值2);

2.访问成员

//Item访问法
元组名.ItemN
//字段名访问法
元组名.字段名N

3.析构(Deconstruct)元组

析构的过程恰恰与元组的声明和初始化相反,析构是将已存在的元组析构成多个单独的变量。

//显式类型
(类型1 变量名1, 类型2 变量名2) = 元组1;

//隐式类型
var (变量名1, 变量名2) = 元组2;

//变量需先声明和初始化
类型1 变量名1 = 初始值1;
类型2 变量名2 = 初始值2;
(变量名1, 变量名2) = 元组3;

4.多个方法返回值

有时,需要方法返回多个值。 从 C# 7.0 开始,可以使用元组轻松实现此目的。元组类型定义元组元素的数据类型,元组实参提供返回的元组的实际值。 在下面的示例中,(string, string, string, int) 定义 GetPersonalInfo 方法返回的元组类型,表达式 (per.FirstName, per.MiddleName, per.LastName, per.Age) 是元组实参,方法返回 PersonInfo 对象的第一个、中间和最后一个名称及其使用期限。

public (string, string, string, int) GetPersonalInfo(string id)
{
    PersonInfo per = PersonInfo.RetrieveInfoById(id);
    return (per.FirstName, per.MiddleName, per.LastName, per.Age);
}

5.元组值类型与元组引用类型的区别

元组值类型基于 System.ValueTuple 结构类型,而元组引用类型基于 System.Tuple 类类型。

  • System.ValueTuple 类型是值类型,System.Tuple 类型是引用类型。
  • System.ValueTuple 类型是可变的,System.Tuple 类型是不可变的。
  • System.ValueTuple 类型的数据成员是字段,System.Tuple 类型的数据成员是属性。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/8046.html

(0)
上一篇 2021年3月11日 01:20
下一篇 2021年3月12日 00:51

相关推荐

  • 3.9C#引用类型之特性(Attribute)

    1.特性声明 所有特性类都直接或间接派生自 System.Attribute 基类。 以下示例声明了 HelpAttribute 特性。 2.调用特性 调用特性时,通过用方括号 ([]) 将特性名称以及实参括起来,并置于应用该特性的实体的声明上方。可以将多个特性附加到实体的声明上。对于给定实体,一些…

    C#语言教程 2021年3月9日
    02080
  • 2.9C#函数成员之构造函数(Constructor)

    构造函数的声明方式与方法相似,与所属结构或类同名,不过没有返回类型。 如果没有为结构或类提供实例构造函数,则会隐式自动提供无参数的实例构造函数,这时此结构或类可以被实例化。 不过,如果显式地使用 private 修饰符修饰无参数的空实例构造函数会清楚地表明该类不能被实例化。 1.构造函数分类 名称 …

    C#语言教程 2021年2月9日
    04030
  • 3.8C#引用类型之集合(Collection)

    与数组最大的区别,集合的长度(元素的个数)可以动态改变,可以向集合添加、删除元素 。 1.集合分类 1.1System.Collections.Generic 类 当集合中的所有元素都具有相同的数据类型时,泛型集合会非常有用。 类 说明 元素的顺序 元素重复的值 Dictionary<TKey,TValue&gt…

    C#语言教程 2021年3月8日
    04560

发表回复

登录后才能评论