Tuple和 ValueTuple
这个类型还是学习C#7.0的语法在看到的,这边单独拿来学习下。
学习地址:
https://docs.microsoft.com/zh-cn/dotnet/csharp/tuples
https://docs.microsoft.com/zh-cn/dotnet/csharp/deconstruct
C# 元组是使用轻量语法定义的类型,是一个泛型 。 其优点包括:更简单的语法,基于元素数量(称为“基数”)和元素类型的转换规则,以及一致的副本、相等测试和赋值规则。
缺点:Tuple
类将其属性命名为 Item1
、Item2
等。 这些名称未承载任何语义信息。 使用这些 Tuple
类型无法表达各属性的含义。Tuple
类因其引用类型会导致更多性能问题。
在C#7.0和7.1的语法中新增了一些功能,改善了这些缺点。
普通的Tuple
var tuple = new Tuple<int, int,string>(1, 2,"hello");Console.WriteLine(tuple.Item1);Console.WriteLine(tuple.Item2);Console.WriteLine(tuple.Item3);
新的元组 ValueTuple (这个需要你去安装nuget包)
//需要我们在nuget上安装 System.ValueTuplevar tuple = (1, 2);var tuple2 = ValueTuple.Create(1, 2); var tuple3 = new ValueTuple<int, int>(1, 2);Console.WriteLine($"{tuple.Item1}and{tuple.Item2}");
从 C# 7.1 开始,元组的字段名称可能会通过用于初始化此元组的变量提供。我们可以使用字段名称来代替 Item1,Item2
ps: 设置查看项目的语言版本:项目——属性——生存——高级——语言版本
var named = (first: "one", second: "two");Console.WriteLine($"{named.first}"); //7.0var sum = 12.5;var count = 5;var accumulation = (count, sum);Console.WriteLine($"{accumulation.count}"); //需要我们的语言版本是7.1
(int a, int b) nullableTuple = (9, 8); //左边命名 Console.WriteLine(nullableTuple.a);(int a, int b) nullableTuple2 = (one: 9, two: 8); //左右两边命名,右边的命名会被忽略
//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 (8, 9);}
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}");
转载于:https://www.cnblogs.com/Sea1ee/p/10339413.html
Tuple和 ValueTuple相关推荐
- Tuple VS ValueTuple
为什么有此文章 首先要说的是我们公司内部技术框架是用 abp.vnext 框架整合而来的,我们架构师对于 abp 相关的知识都很了然于胸了.并且这个框架的确很优秀,省了我们前期大量基础工作.架构师把主 ...
- 详解C# Tuple VS ValueTuple(元组类 VS 值元组)
C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple.这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解Valu ...
- C#从零单排上王者系列---元组
从零单排系列说明 博主最初的想法是想写个蜕茧成蝶的系列文章,后来觉得博客的表现形式很难做到连贯和系统.所以从本篇博客开始博主会选择书中比较重要和不好理解的知识点并结合自己的实际工作经验来讲解,不再是照 ...
- 500w 的引用类型和值类型到底有多大差异?
大家在写代码的时候,相信有很多朋友对 struct 认知不是很足,导致能用 class 的地方绝对不用struct,但大家有没有发现,最近的几个 C# 版本中,底层框架中有很多 class 的替代品, ...
- 如何 修改服务器控件的text,设置TextBox控件的TextMode属性
我想在程式代碼中將TextBox控件的TextMode属性设置為Password,寫成TextBox1.TextMode=MultiLine和TextBox1.TextMode="Multi ...
- C#关键字扫盲——Tuple(元组类) 、ValueTuple(值元组)
转载自:https://blog.csdn.net/Michel4Liu/article/details/79750877 当方法返回值大于一个时我们有时用out或结构体或类来处理,今天介绍一个简便的 ...
- C#元组类型System.ValueTuple
元组功能在 C# 7.0 及更高版本中可用,它提供了简洁的语法,用于将多个数据元素分组成一个轻型数据结构. 元组功能需要 System.ValueTuple 类型和相关的泛型类型(例如 System. ...
- 如何使用 C# 中的 ValueTuple
Tuple 是一种数据结构,它由一个有序的.有限的.大小固定的.不可变的异构元素的序列组成,当我们说 Tuple 中的元素不可变,意味着其中的元素不能进行修改. ValueTuple 是在 C# 7 ...
- python元组元素的提取比_Python 元组数据类型(tuple)详解 [访问元组元素][修改元组元素][删除元组][学习 Python 必备基础知识][看此一篇就够了]...
您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 元 ...
- C++11中std::tuple的使用
std::tuple是类似pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tuple可以有任意数量的成员 ...
最新文章
- 网络广告投放四大技巧有哪些?怎么样投放效果最好?
- c#随机数生成编号_使用C#生成随机密码(纯数字或字母)和随机卡号(数字与字母组合)...
- 透明位图的显示(TransparentBlt函数)
- 深入浅出:5G和HTTP
- 原生android 权限管理,Android 权限管理(原生、EasyPermissions、RxPermissions)
- C++STL——概述
- 在大公司天天调参数,感觉快废了~
- 交大计算机学硕往年录取情况,上海交通大学2020年考研报录情况汇总及分析
- 关于PopWindow的一些介绍
- 解决Win10强制更新的工具:show or hide updates
- 1999-2019中国互联网发展二十年趋势
- 计算机usb速度设置,USB3.0移动硬盘写入速度只有20M/S解决提速方法
- 生产环境RedisCPU飙高怎么办
- Mock.js 使用
- 中科院正研制多核CPU龙芯3号 将用于超级计算机(转)
- 大数除法——超详细讲解
- 怎样把计算机扫描放到桌面,电脑扫描文件怎么弄【面对方法】
- 电气,电子的详细区分
- 水果网站关于我们的纯html的代码_2020年网站建设的报价清单
- 三维视觉论文阅读:GANet2019双目立体匹配
热门文章
- JAVA DES加密解密代码范例
- 编码基本功:千万不要重写,找到问题后逐步改进,平稳过度交接
- MAC编译OpenJDK8:详细步骤及问题解决办法(含独家解决办法)
- CSDN的私信,手机与电脑发的消息,不能同时显示?
- 真正解决办法:编译freeswitch错误,You must install libavformat-dev to build mod_av
- 修改配置文件,编译freeswitch支持H264
- del/xcopy时如何在输出窗口中,不显示文件名
- 目录字串最后都不要带目录分隔符
- 错误解决办法:2006:MySQL server has gone away
- 桃养人,杏害人,樱桃树下埋死人