如何使用 C# 中的 ValueTuple

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 窗口中使用如下命令。

dotnet add package System.ValueTuple

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

创建 ValueTuple

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

  • 使用构造函数

  • 使用 Create 方法

  • 使用 ()

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


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

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


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

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


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

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


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

ValueTuple 的命名属性

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


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

从方法中返回 ValueTuple

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


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

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

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


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

修改 ValueTuple 中的值

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

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

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


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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tutte定理证明hall定理_人教社课本现低级错误?“爱因斯坦用相对论证明勾股定理”...

南方加客户端南方加客户端6月18日消息&#xff0c;近日&#xff0c;有网友在网上发帖称&#xff0c;人教版八年级下册数学自读课本中有关“爱因斯坦证明勾股定理”的内容疑似出现错误&#xff0c;此事引发网友关注&#xff0c;目前在社交平台上发酵。网友上传的课本图片据网友上…

在 “相对” 高薪面前,任何的喊冤叫屈都是苍白无力的

2021年刚开始&#xff0c;我的朋友圈就被一桩接着一桩的 “噩耗” 连番轰炸。1月1日&#xff0c;曾在《巴啦啦小魔仙》中饰演 “凌美琪” 的孙侨潞不幸去世&#xff0c;年仅25岁&#xff0c;死因是常年熬夜&#xff0c;再加上饮酒过量而导致的猝死。1月3日&#xff0c;我在网上…

在SQLSERVER企业管理器中如何创建触发器

下面将分别介绍在MS SQLServer 中如何用SQL Server 管理工具Enterprise Manager 和Transaction_SQL 来创建触发器。在创建触发器以前必须考虑到以下几个方面&#xff1a; CREATE TRIGGER 语句必须是批处理的第一个语句; 表的所有者具有创建触发器的缺省权限,表的所有者不能把该…

lunixs 常用命令c语言,常用Lunix命令 - osc_271igh42的个人空间 - OSCHINA - 中文开源技术交流社区...

计算机1.硬件系统输入单元、输出单元、算术逻辑单元、控制单元、记忆单元中央处理单元&#xff1a;CPU(算术逻辑单元、控制单元)电源、主板、CPU、内存(RAM)、硬盘、(声卡、显卡、网卡)(集成在主板上)、调制解调器(将输入的模拟信号转为数字信号)、光驱2.软件系统man  查看帮…

srv.sys蓝屏解决补丁_Win10 补丁 KB4556799 导致部分用户蓝屏死机和网络问题

IT之家5月26日消息 Windows 10 补丁 KB4556799对某些配置造成了许多新问题。除了音频问题&#xff0c;临时用户配置文件和FPS下降之外&#xff0c;Windows 10最新累积更新还导致某些用户出现蓝屏死机、崩溃和网络问题。与Windows 10更新一样&#xff0c;用户经常遇到一系列不同…

c语言键盘控制数码管显示,3*4矩阵键盘控制4位数码管显示的C程序

这个很简单;********************************************************************************;* 标题: 伟纳电子ME300B单片机开发系统演示程序 - 矩阵键盘数码管显示键值 *;* 文件: WL031.asm *;* …

IdentityServer4(六)授权码流程原理之SPA

在【One by One系列】IdentityServer4&#xff08;四&#xff09;授权码流程中提过一句&#xff1a;“为了安全&#xff0c;IdentityServer4是带有PKCE支持的授权码模式”我们来回顾一下授权码流程&#xff08;A&#xff09;用户访问客户端&#xff0c;后者将前者导向认证服务器…

JS实现上下左右四方向无间隙滚动

想必大家都注意到<marquee>的不循环滚动&#xff0c;所以出现了很多替代脚本&#xff0c;或iframe或JS输出<marquee>&#xff0c;不管怎么做&#xff0c;都略显麻烦。下面说一下这个相对简单的实现思路&#xff1a;一个设定宽度并且隐藏超出它宽度的内容的容器demo…

适合手机端的ckeditor样式_抖音运营干货(三):9款手机视频剪辑APP,让你轻松玩转后期!...

很多朋友想开始用手机拍视频&#xff0c;可能不知道如何剪辑&#xff01;本文将给大家介绍几款好用又方便的手机剪辑短视频工具&#xff0c;即便是零基础&#xff0c;用下面这些工具&#xff0c;你也可以轻松开始剪辑短视频。选择一款实用好用的剪辑工具很重要&#xff0c;工具…

来吧,是时候升级您的领英技术档案了

阅读此文需要2分钟&#xff08;文末有惊喜&#xff09;LinkedIn的应用之广超乎你的想象&#xff0c;包括社会招聘、公关、社群建设、销售、社交媒体营销&#xff08;包括社交广告&#xff09;以及员工宣传。LinkedIn档案不是一份简历&#xff0c;而是集客式营销&#xff08;inb…

c语言查单词小程序,【附源码】小程序初窥之简单查单词

新年假期百无聊赖&#xff0c;于是就看了一下微信小程序的开发方法&#xff0c;花了两天时间入了个门&#xff0c;这里记录一下。阅读之前&#xff0c;先确定你知道基本的 htmlcssjs 语法&#xff0c;这样就能更好地和我一样&#xff0c;以一个新手的视角来理解小程序。目标目标…

读注册表

Public Shared Function readregedit() As Boolean Dim State As RegistryKey State Registry.LocalMachine.OpenSubKey("SOFTWARE\JxcDFT Studio\Register") Try Dim StateValue As String 注意&#xff1a;注册表值取分大小写…

python连接mysql_Python爬虫进阶教程(八):MySQL 数据库连接

PyMySQL介绍PyMySql包含一个纯python的MySQL客户端库。PyMySQL的目标是成为MySQLdb的替代品&#xff0c;并在CPython、PyPy和IronPython上工作。版本要求python 下列之一CPython > 2.6 or > 3.3PyPy > 4.0IronPython 2.7mysql 下列之一MySQL > 4.1 (tested with on…

使用 gRPCurl 调试.NET 5的gPRC服务

介绍你用过 Curl 吗&#xff1f;这个工具允许你通过 http 来发送数据&#xff0c;现在有一个适用于gGRPC的工具&#xff0c;gRPCurl&#xff0c;在本文中&#xff0c;我将介绍如何下载安装这个工具&#xff0c;然后通过这个工具调试我们.NET 5上面的gGRC程序。安装 gRPCurlgRPC…

ICE专题:ICE简介

ICE(Internet Communications Engine)是一个为现实中程序员而写的中间件平台。作为一个高性能的互联网通信平台&#xff0c;ICE包含了很多分层的服务和插件(Plug-ins)&#xff0c;并且简单、高效和强大。 ICE的自由使用遵从GNU的GPL(GNU General Public Licens)许可的条款。ICE…

c语言计算文件摘要值,c语言文件操作摘要.ppt

c语言文件操作摘要第十章 文件 10.1 C文件概述 文件&#xff1a;存储在外部介质上数据的集合,是操作系统数据管理的单位 文件处理方法 缓冲文件系统&#xff1a;高级文件系统&#xff0c;系统自动为正在使用的文件开辟内存缓冲区 非缓冲文件系统&#xff1a;低级文件系统&#…

此 sqltransaction 已完成;它再也无法使用_手把手教你如何修眉毛,学会再也不用花钱去美容院了...

最近看到有网友在评论中询问怎么修眉毛&#xff0c;刚好小编我对修眉有一点研究&#xff0c;可能比不上专业修眉的&#xff0c;但是最少能看不是&#xff0c;今天拿出来献给大家&#xff0c;希望各位自己学会如何修眉毛&#xff0c;那样的话以后就再也不用花钱去美容院了。在此…

国产OS推广应从娃娃和体制内双管齐下

一直以来&#xff0c;国内桌面操作系统被微软垄断。究其根源&#xff0c;既有微软技术更成熟&#xff0c;软件生态丰富、服务完善、商业化水平更好等因素之外&#xff0c;也有老百姓习惯于使用Windows等因素。老百姓之所以习惯于Windows&#xff0c;则是因为破解版横行和微软早…

ASP.NET AJAX 控件开发基础

在 JavaScript 当前广泛使用的版本中&#xff0c;它缺少 .NET 开发人员所熟悉的几个 OOP 的关键概念&#xff0c;而 ASP.NET AJAX 可以模拟其中的大多数,而且 ASP.NET AJAX 的目标是将使用 .NET 的开发人员所熟悉的某些其他构造&#xff08;例如属性、事件、枚举和接口&#xf…

c语言铁路托运行李费用图,3.为铁路部门编写计算运费的程序。假设铁路托运行李,规定每张客票托运费计算方法是:行李重量不超过50kg...

满意答案wodfsdfeqd81推荐于 2018.10.08采纳率&#xff1a;51% 等级&#xff1a;12已帮助&#xff1a;5850人using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication40{class Program{static void Main(string[]…