如何使用 C# 中的 ValueTuple

开发 后端
Tuple 是一种数据结构,它由一个有序的、有限的、大小固定的、不可变的异构元素的序列组成,当我们说 Tuple 中的元素不可变,意味着其中的元素不能进行修改。

本文转载自微信公众号「码农读书」,作者 码农读书 。转载本文请联系码农读书公众号。

Tuple 是一种数据结构,它由一个有序的、有限的、大小固定的、不可变的异构元素的序列组成,当我们说 Tuple 中的元素不可变,意味着其中的元素不能进行修改。

ValueTuple 是在 C# 7 中被引入,它主要用来解决 Tuple 的两个问题。

  • 解决语义化问题,在之前你只能通过 Item1,Item2, ... 的方式进行元素访问
  • 解决性能问题,因为 ValueTuple 是一个轻量级的值类型

这篇文章将会讨论 ValueTuple 是什么及如何使用。

ValueTuple 和 Tuple

ValueTuple 是一个轻量级的值类型,并支持强命名,而 Tuple 是一个引用类型,总的来说,ValueTuple 要比 Tuple 拥有更高的性能,Tuple 中的属性是只读的,也就是说一旦创建好之后就不能进行变更了,而 ValueTuple 的属性就可以在创建之后进行修改。

安装 System.ValueTuple

一旦使用 Visual Studio 创建好 Console 应用程序后,接下来就可以安装 NuGet 包了,你可以使用 Visual Studio 2019 IDE 进行可视化安装,也可以在 .NET CLI 窗口中使用如下命令。

  1. dotnet add package System.ValueTuple 

请注意现在 ValueTuple 已经作为 .NET Framework 4.7 的一个子集存在了。

创建 ValueTuple

有几种方式可以创建 ValueTuple,大致如下:

  • 使用构造函数
  • 使用 Create 方法
  • 使用 ()

下面的代码片段展示了如何使用 构造函数 来创建 ValueTuple。

  1. ValueTuple<int, string, string> valueTuple =new ValueTuple<int, string, string>(1, "Joydip""Kanjilal"); 

再来看看如何通过 Create 方法创建 ValueTuple,如下代码所示:

  1. var valueTuple = ValueTuple.Create(1, "Joydip""Kanjilal"); 

你也可以给成员名赋值相应的value来创建一个 ValueTuple,如下代码所示:

  1. var author = (Id: 1, FirstName: "Joydip", LastName: "Kanjilal"); 

除了上面这种方法,还可以将 成员名 + 对应值 放置在左边来实现对 ValueTuple 的创建和初始化,代码如下:

  1. (int Id, string FirstName, string LastName) author = (1, "Joydip""Kanjilal"); 

ValueTuple 的命名属性

ValueTuple 支持更加语义化的命名属性,用来替代默认的 Item1,Item2,Item3 ... 下面的代码展示了如何给 ValueTuple 的属性分配名字。

  1. (int Id, string FirstName, string LastName) author = (1, "Joydip""Kanjilal"); 

从方法中返回 ValueTuple

和 Tuple 一样,也可以使用 ValueTuple 从方法中返回多个值,下面的代码片段展示了如何从方法中返回 ValueTuple。

  1. static (int, string, string) GetAuthor() 
  2.     return (Id: 1, FirstName: "Joydip", LastName: "Kanjilal"); 

使用 解构函数从 ValueTuple 中提取成员

可以使用 解构函数 从 ValueTuple 中提取多个成员,下面的代码片段展示了如何去实现。

  1. (int Id, string FirstName, string LastName) = GetAuthor(); 

修改 ValueTuple 中的值

文章之前也提到了,Tuple 创建好之后就不能对其成员进行修改,而 ValueTuple 却可以,下面的代码展示了这两者的区别。

从上图中的错误信息栏中,可以看出,Tuple 中的 Item 是只读的,不支持修改。

最后要提的一点是:你可以利用扩展方法实现 System.Tuple 和 System.ValueTuple 之间的互转,下面的代码展示了如何将 ValueTuple 转成 Tuple。

  1. var valueTuple = ValueTuple.Create(1, "Joydip""Kanjilal"); 
  2. var tuple = valueTuple.ToTuple(); 

ValueTuple 拥有比 Tuple 更简单的词法和更高的性能,此外,还可以修改它们的数据成员并且还可以给它们赋一些有意义的名字,总之,有太多的理由值得你用 ValueTuple 来代替 Tuple 了。

译文链接:https://www.infoworld.com/article/3528752/how-to-use-valuetuples-in-csharp.html

 

责任编辑:武晓燕 来源: 码农读书
相关推荐

2020-05-22 07:00:00

C#用户注释编程语言

2009-08-18 14:29:27

DirectSound

2009-08-19 16:42:41

C#如何使用XML

2015-09-16 15:11:58

C#异步编程

2009-08-06 16:44:03

C#创建WebServ

2009-03-12 13:49:30

DataTemplatWPFC#

2024-04-16 12:13:07

usingC#开发

2020-12-31 07:31:10

C# 反射数据

2009-08-21 15:37:13

C#空格

2020-02-28 09:00:00

ObjectC#编程语言

2009-08-06 17:15:34

C#开发和使用

2021-03-07 16:37:52

C#应用程序

2021-02-01 12:36:59

C# Channels存储

2009-08-27 17:47:21

c#皮肤

2009-09-11 11:27:38

AttributeUsC# Attribut

2024-04-15 16:11:33

C#HTTP请求.NET

2009-01-19 10:26:02

C#Namespace.NET

2009-08-03 16:39:56

C# Assembly

2021-01-18 05:18:18

C# 8模式C# 7

2021-01-19 05:30:55

C# 8异步流IEnumerable
点赞
收藏

51CTO技术栈公众号