这个类型还是学习C#7.0的语法在看到的,这边单独拿来学习下。

学习地址:

https://docs.microsoft.com/zh-cn/dotnet/csharp/tuples

https://docs.microsoft.com/zh-cn/dotnet/csharp/deconstruct

C# 元组是使用轻量语法定义的类型,是一个泛型 。 其优点包括:更简单的语法,基于元素数量(称为“基数”)和元素类型的转换规则,以及一致的副本、相等测试和赋值规则。

缺点:Tuple 类将其属性命名为 Item1Item2 等。 这些名称未承载任何语义信息。 使用这些 Tuple 类型无法表达各属性的含义。Tuple 类因其引用类型会导致更多性能问题。

在C#7.0和7.1的语法中新增了一些功能,改善了这些缺点。

普通的Tuple

var tuple = new Tuple<int, int,string>(, ,"hello");
Console.WriteLine(tuple.Item1);
Console.WriteLine(tuple.Item2);
Console.WriteLine(tuple.Item3);

新的元组 ValueTuple (这个需要你去安装nuget包)

  //需要我们在nuget上安装 System.ValueTuple
var tuple = (, );
var tuple2 = ValueTuple.Create(, );
var tuple3 = new ValueTuple<int, int>(, ); Console.WriteLine($"{tuple.Item1}and{tuple.Item2}");

从 C# 7.1 开始,元组的字段名称可能会通过用于初始化此元组的变量提供。我们可以使用字段名称来代替 Item1,Item2

ps: 设置查看项目的语言版本:项目——属性——生存——高级——语言版本

        var named = (first: "one", second: "two");
Console.WriteLine($"{named.first}"); //7.0
var sum = 12.5;
var count = ;
var accumulation = (count, sum);
Console.WriteLine($"{accumulation.count}"); //需要我们的语言版本是7.1
        (int a, int b) nullableTuple = (, );  //左边命名
Console.WriteLine(nullableTuple.a);
(int a, int b) nullableTuple2 = (one: , two: ); //左右两边命名,右边的命名会被忽略
     //valueType作返回值
var tt = TestValueTuple();
Console.WriteLine(tt.i); (int i, int j) = TestValueTuple();
Console.WriteLine(i); var (z, x) = TestValueTuple();
Console.WriteLine(z);
           public static (int i, int j) TestValueTuple()
{
return (, );
}
Deconstruct 析构该类型的实例   (只能是这个名称),Deconstruct还可以写成扩展方法
        public class Person
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string City { get; set; }
public string State { get; set; } public Person(string fname, string mname, string lname,
string cityName, string stateName)
{
FirstName = fname;
MiddleName = mname;
LastName = lname;
City = cityName;
State = stateName;
} // Return the first and last name.
public void Deconstruct(out string fname, out string lname)
{
fname = FirstName;
lname = LastName;
} public void Deconstruct(out string fname, out string mname, out string lname)
{
fname = FirstName;
mname = MiddleName;
lname = LastName;
} public void Deconstruct(out string fname, out string lname,
out string city, out string state)
{
fname = FirstName;
lname = LastName;
city = City;
state = State;
}
}
 Person p = new Person("John", "Quincy", "Adams", "Boston", "MA");

            //他会根据你的前面的参数个数自动去匹配Deconstruct重载
(string fName, string lName, string city, string state) = p;
Console.WriteLine($"Hello {fName} {lName} of {city}, {state}!"); (string name, string lname) = p;
Console.WriteLine($"{name}");

Tuple和 ValueTuple的更多相关文章

  1. 详解C# Tuple VS ValueTuple(元组类 VS 值元组)

    C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化,并且网上也有大量的介绍,这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解Val ...

  2. C# Tuple VS ValueTuple

    C# Tuple VS ValueTuple(元组类 VS 值元组) C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple.这里利用详尽的例子详解Tuple VS ...

  3. Tuple VS ValueTuple

    深入理解 c# 元组与值元组(Tuple,ValueTuple) 为什么有此文章 首先要说的是我们公司内部技术框架是用 abp.vnext 框架整合而来的,我们架构师对于 abp 相关的知识都很了然于 ...

  4. C#关键字扫盲——Tuple(元组类) 、ValueTuple(值元组)

    原文:C#关键字扫盲--Tuple(元组类) .ValueTuple(值元组) 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/articl ...

  5. C# 9.0元组 (ValueTuple)详细解说

    元组 (ValueTuple)类型是值类型:元组元素是公共字段,可以使用任意数量的元素定义元组.Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢 ...

  6. C#学习笔记

    1.C#中[],List,Array,ArrayList的区别 [] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList ...

  7. C#从零单排上王者系列---元组

    从零单排系列说明 博主最初的想法是想写个蜕茧成蝶的系列文章,后来觉得博客的表现形式很难做到连贯和系统.所以从本篇博客开始博主会选择书中比较重要和不好理解的知识点并结合自己的实际工作经验来讲解,不再是照 ...

  8. C# 元组和值元组

    C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple.这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解Valu ...

  9. Tuple元组 、 ValueTuple 值元组详解

    Tuple元组 Tuple是C# 4.0时出的新特性,.Net Framework 4.0以上版本可用. 元组是一种数据结构,具有特定数量和元素序列,与数组不同,元祖中的元素可以不同的数据类型.比如设 ...

随机推荐

  1. csharp:Convert Image to Base64 String and Base64 String to Image

    /// <summary> /// 图像转成二进制数组 /// </summary> /// <param name="imageIn">< ...

  2. BZOJ4698: Sdoi2008 Sandy的卡片(二分 hash)

    题意 题目链接 Sol 用什么后缀数组啊 直接差分之后 二分+hash找最长公共子串就赢了啊... 时间复杂度:\(O(nlogn)\)(不过我写的是两个log..反正也能过) // luogu-ju ...

  3. 软件项目技术点(5)——在canvas上绘制动态网格线

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 grid类的实现 当鼠标在画布上缩放时,网格能跟着我的鼠标滚动而相应的有放大缩小的效果. 下面是具体实现的代码,draw函数里计算出大 ...

  4. css模仿百度首页

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 006服务监控看板Hystrix Dashboard

    1.POM配置 和普通Spring Boot工程相比,仅仅添加了Hystrix Dashboard和Spring Boot Starter Actuator依赖 <dependencies> ...

  6. postgres备份数据库

    1. psql --help psql is the PostgreSQL interactive terminal. Usage: psql [OPTION]... [DBNAME [USERNAM ...

  7. Python爬虫教程-33-scrapy shell 的使用

    本篇详细介绍 scrapy shell 的使用,也介绍了使用 xpath 进行精确查找 Python爬虫教程-33-scrapy shell 的使用 scrapy shell 的使用 条件:我们需要先 ...

  8. 浅谈回归(二)——Regression 之历史错误翻译

    我很好奇这个问题,于是搜了一下.我发现 Regression 这个词 本意里有"衰退"的意思. 词根词缀: re- 回 , 向后 + -gress- 步 , 级 + -ion 名词 ...

  9. Linq中的in和not in的使用方法

    T-SQL语句: select * from PayingRecords where ClientID='17787665-1d98-49e6-b254-a6a6553c4b42' and ID no ...

  10. Linux ->> Ubuntu 14.04 LTE下安装JDK 1.8

    先到Oracle官网的下载中心下载JDK8的tar包到本地. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...