[C#7] 1.Tuples(元组)

1. 老版本代码

 

class Program

{

    static void Main(string[] args)

    {

        var fullName = GetFullName();


        Console.WriteLine(fullName.Item1);// Item1,2,3不能忍,,,

        Console.WriteLine(fullName.Item2);

        Console.WriteLine(fullName.Item3);

    }

    static Tuple<string, string, string> GetFullName() => new Tuple<string, string, string>("first name", "blackheart", "last name");

}

在有些场景下,我们需要一个方法返回一个以上的返回值,微软在.NET 4中引入了Tuple这个泛型类,可以允许我们返回多个参数,每个参数按照顺序被命名为 Item1;Item2,Item3 ,算是部分的解决了我们的问题,但是对于强迫症程序员来说,Item1,2,3的命名简直是不能忍的,,,so,在C#7中,引入了一个新的泛型类型ValueTuple<T>来解决这个问题,这个类型位于一个单独的dll(System.ValueTuple)中,可以通过nuget来引入到你当前的项目中(https://www.nuget.org/packages/System.ValueTuple/)。

2. ValueTuple

不废话,直接看代码:

class Program

{

    static void Main(string[] args)

    {

        var fullName = GetFullName();


        Console.WriteLine(fullName.First);  // 终于可以不是Item1,2,3了,,,

        Console.WriteLine(fullName.Middle);

        Console.WriteLine(fullName.Last);

    }


    static (string First, string Middle, string Last) GetFullName() => ("first name", "blackheart", "last name");

}

看出来差别了吗?我们终于可以用更直观的名字来替换掉该死的"Item1,2,3"了,看起来很棒吧。但是貌似我们并没有用到上面我提到的System.ValueTuple,我们翻开编译后的程序集看看:

internal class Program

{

    private static void Main(string[] args)

    {

        ValueTuple<string, string, string> fullName = Program.GetFullName();

        Console.WriteLine(fullName.Item1); // 原来你还是Item1,2,3,,,FUCK!!!

        Console.WriteLine(fullName.Item2);

        Console.WriteLine(fullName.Item3);

    }


    [TupleElementNames(new string[]

    {

            "First",

            "Middle",

            "Last"

    })]

    private static ValueTuple<string, string, string> GetFullName()

    {

        return new ValueTuple<string, string, string>("first name", "blackheart", "last name");

    }

}

不看不知道,一看吓一跳,原来我们的 fullName.First; 编译后居然还是 fullName.Item1 ,真是日了狗了。。。

不同之处在于GetFullName这个方法,编译器把我们简化的语法形式翻译成了 ValueTuple<string, string, string> ,还给加了一个新的Attribute(TupleElementNamesAttribute),然后把我们自定义的非常直观友好的“First”,"Middle","Last"当作元数据给存起来了。TupleElementNamesAttribute和ValueTuple一样,位于System.ValueTuple的单独dll中。

3. 总结

新的语法形式确实直观友好了好多,but,本质依然是借助泛型类型来实现的,同时也需要编译器对新语法形式的支持。

了解了本质是什么东西之后,以后在项目中环境允许的话,就放心大胆的使用吧(类型ValueTuple可以出现的地方,(first,last)这种新语法形式均可以)。

参考:https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/


原文地址:http://www.cnblogs.com/linianhui/p/csharp7_tuple.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

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

相关文章

mysql 行转列分级输出_MySQL如何实现行转列分级输出?_MySQL

概述好久没写SQL语句&#xff0c;今天看到问答中的一个问题&#xff0c;拿来研究一下。问题链接&#xff1a;关于Mysql 的分级输出问题情景简介学校里面记录成绩&#xff0c;每个人的选课不一样,而且以后会添加课程&#xff0c;所以不需要把所有课程当作列。数据表里面数据如下…

2017蓝桥杯省赛---java---B---7(日期问题)

题目描述 日期问题 标题&#xff1a;日期问题小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是&#xff0c;这些日期采用的格式非常不统一&#xff0c;有采用年/月/日的&#xff0c;有采用月/日/…

ssm使用全注解实现增删改查案例——DeptMapperImpl

package org.dao.impl;import java.util.List;import org.dao.IDeptMapper; import org.entity.Dept; import org.springframework.beans.factory.annotation.Autowired;public class DeptMapperImpl implements IDeptMapper {//自动注入Autowiredprivate IDeptMapper deptMapp…

Gson的入门使用

转载自 Gson的入门使用 Java对象和Json之间的互转&#xff0c;一般用的比较多的两个类库是Jackson和Gson&#xff0c;下面记录一下Gson的学习使用。 基础概念&#xff1a; Serialization:序列化&#xff0c;使Java对象到Json字符串的过程。 Deserialization&#xff1a;反序…

Visual Studio 2017正式版离线安装及介绍

Visual Studio 2017 RTM正式版离线安装及介绍。 首先至官网下载&#xff1a;https://www.visualstudio.com/zh-hans/downloads/ VS 2017 正式版介绍&#xff1a; https://www.visualstudio.com/zh-hans/vs/whatsnew/ VS 2017 离线模式只离线.NET Core部分&#xff1a; Visual S…

ssm使用全注解实现增删改查案例——EmpMapperImpl

package org.dao.impl;import java.util.List;import org.dao.IEmpMapper; import org.entity.Emp; import org.springframework.beans.factory.annotation.Autowired;public class EmpMapperImpl implements IEmpMapper {//自动注入Autowiredprivate IEmpMapper empMapper;/*…

Linux下查找命令

转载自 Linux下查找命令 一.Linux查找文件的相关命令 常 用 命 令 简要中文说明 程序所在目录 more 分页显示一个文件或任何输出结果 /bin less 分页显示一个文件并且可以回头 /usr/bin whereis 寻找文件工具 /usr/bin find 寻找文件工具 /usr/bin locate 寻…

wadl2java cxf_java – CXF JAXRS |生成的wadl中不存在复杂响应类型

我们使用cxf 2.5.2和spring来暴露和消费宁静的服务.为了分发服务接口类,我们开始使用wadl2java目标(根据给定的wadl文件生成接口类)生成的wadl不包含正确的响应类型,因为我猜测,生成的接口都有’Response’作为返回类型.防爆.如果restful get方法返回’List’,则生成的wadl仅包…

Visual Studio 2017 新功能(上)

开发&#xff1a;快速导航、编写并修复代码 新的安装体验 - 降低了最小内存需求量以实现更快、更定制化的安装&#xff0c;并且支持脱机安装。 Visual Studio IDE - 大幅改进了 Visual Studio 2017&#xff0c;包括减少启动和解决方案加载时间、改进登录和标识、改进代码导航以…

2018蓝桥杯省赛---java---B---1(第几天)

题目描述 思路分析 31 29 31 30 4 125 答案 125

ssm使用全注解实现增删改查案例——Dept

package org.entity;import java.util.List; /*** * * 项目名称&#xff1a;test_myabtis_zhujie * 类名称&#xff1a;Dept * 类描述&#xff1a; 部门表的实体类 * 创建人&#xff1a;Mu Xiongxiong * 创建时间&#xff1a;2018-3-16 下午4:33:10 * 修改人…

mysql 数据库引擎

转载自 mysql 数据库引擎 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎&#xff0c;就必须重新编译MYSQL。在缺省情况下&#xff0c;MYSQL支持三个引擎&#xff1a;ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY&#xff0…

java 组件化_(原创)搭建一个组件化的监控平台

最近看到一位同事正在开发一个监控软件&#xff0c;要求就是通过针对服务器现有的一些接口&#xff0c;通过这些接口返回的数据进行分析&#xff0c;如果监控的值到达预先设定的范围则通过短信的方式发送给管理员。从整个开发的功能上来看是一个比较单一也很明确的功能&#xf…

微软发招,苹果发飙,React Native躺枪

这两天苹果和微软互怼&#xff0c;用脚本热更新的朋友要谨慎过 iOS 审核。 早上有Q群里面在讨论最近用 JavaScript 做为脚本层&#xff0c;在苹果商店审核遭拒的情况。 从目前多数信息来看&#xff0c;cocos2d-js 和 creator 这样用 SpiderMonkey JSB 技术栈的游戏情况尚好&am…

ssm使用全注解实现增删改查案例——Emp

package org.entity;import java.util.Date; /*** * * 项目名称&#xff1a;test_myabtis_zhujie * 类名称&#xff1a;Emp * 类描述&#xff1a; 员工信息表 * 创建人&#xff1a;Mu Xiongxiong * 创建时间&#xff1a;2018-3-16 下午4:34:02 * 修改人&…

2018蓝桥杯省赛---java---B---2(方格计数)

题目描述 思路分析 圆的对称性 代码实现 package com.atguigu.TEST;class Main{public static void main(String[] args) {int ans0;for (int i 1; i < 1000; i) {for (int j 1; j < 1000; j) {if(i*ij*j<1000*1000){ans;}}}System.out.println(ans*4);//向四边发…

MySQL 5.7 聚合(GROUP BY)功能描述

转载自 MySQL 5.7 聚合&#xff08;GROUP BY&#xff09;功能描述 12.19.1聚合&#xff08;GROUP BY&#xff09;功能描述 本节介绍对值集合进行操作的组&#xff08;聚合&#xff09;函数。 表12.25聚合&#xff08;GROUP BY&#xff09;函数 名称描述AVG()返回参数的平均…

python的pandas库中如何计算每列出现最多的值_Python Pandas:计算多个列的每个唯一值的显示次数...

假设我有一个DataFrame,如,In [7]: source pd.DataFrame([[amazon.com, correct, correct], [amazon.com, incorrect, correct], [walmart.com, incorrect, correct], [walmart.com, incorrect, incorrect]], columns[domain, price, product])In [8]: sourceOut[8]:domain pr…

Visual Studio 2017 新功能(下)

调试和诊断 运行时单击 只需在调试运行到此行时单击代码行旁边的图标。 无需再设置临时断点&#xff0c;也不必再执行多个步骤来执行代码和在所需行停止。 现在&#xff0c;调试器下停在中断状态时&#xff0c;“运行时单击”图标会在鼠标悬停位置的代码行旁边巧妙显示。 将鼠…

ssm使用全注解实现增删改查案例——IDeptService

/** * Title: IDeptService.java * Package org.service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2018-3-12 上午10:45:56 * version V1.0 */ package org.service;import java.util.List;import org.entity.Dept;/…