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

相关推荐

  • 2.4C#函数成员之方法(Method)

    1.方法声明 2.方法分类 2.1成员方法 名称 修饰符 静态成员方法(static method) 用 static 修饰 实例成员方法(instance method) 无 static 修饰 2.2本地函数 本地函数是嵌套在类型里成员内部的private方法。 名称 修饰符 静态本地函数(static local…

    C#语言教程 2021年2月4日
    03530
  • 5.1C#异步编程运行机制

    C#语言的异步编程是基于任务的异步编程(Task Asynchronous Programming,简写TAP)模型,该模型的核心是 Task 和 Task<T> 对象以及 async 和 await 关键字。 1.异步方法声明…

    C#语言教程 2021年5月1日
    01860
  • 3.14C#类型之指针(Pointer)类型

    1.指针类型声明 类型为referent类型*的指针变量存储的是类型为referent类型的固定变量或可移动变量的地址。只有非托管类型可为referent类型。 任何指针类型可以分配 null。 2.继承 指针类型没有从 System.Object 继承。 3.类型转换 指针类型与 Sys…

    C#语言教程 2021年3月14日
    01590

发表评论

登录后才能评论