C#7.0中的解构功能---Deconstruct
解构元组
C#7.0新增了诸多功能,其中有一项是新元组(ValueTuple),它允许我们可以返回多个值,并且配合解构能更加方便的进行工作,如下面例子
static void Main(string[] args)
{
(var name, var age) = GetUser();
Console.WriteLine($"name:{name}\nage:{age}");
}
public static (string name,int age) GetUser()
{
return ("张三", );
}
可以看到解构元组可以写出优雅的代码,并且可以使用类型推断,但在这里解构元组并不是重点,所以不过多关注,下面说一个有趣的功能
解构对象
解构能力并不是只能解构元组,他还有一个更加有意思的功能,就是解构对象。是不是听起来挺有意思。
static void Main(string[] args)
{
var user = new User
{
Name = "张三",
Age = ,
Email = "zhangsan@126.com",
Sex="男" };
(var name, var email) = user;
Console.WriteLine($"name:{name}\nemail:{email}");
}
上面代码是不是很惊奇,反正我第一次看到时特别惊讶,也感觉特别有意思,那么这到底怎么实现的呢,其实只是在类中添加一个解构函数(Deconstruct)就可以,解构参数方法名称必须是Deconstruct,返回值必须是void,参数列表必须是out
public class User
{
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
//解构函数
public void Deconstruct(out string name,out string email)
{
name = Name;
email = Email;
}
}
是不是感觉特别简单,哈哈,
解构函数还支持重载
class Program
{
static void Main(string[] args)
{
var user = new User
{
Name = "张三",
Age = ,
Email = "zhangsan@126.com",
Sex="男"
};
(var name1, var email1) = user;
Console.WriteLine($"name:{name1}\temail:{email1}");
(var name2,var age2, var email2) = user;
Console.WriteLine($"name:{name2}\tage:{age2}\temail:{email2}");
}
}
public class User
{
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
//解构函数
public void Deconstruct(out string name,out string email)
{
name = Name;
email = Email;
}
//结构函数重载
public void Deconstruct(out string name,out int age,out string email)
{
name = Name;
age = Age;
email = Email;
}
}
但是解构不支持参数一致的重载

哪怕参数类型不一致


感觉像参数类型推断错误,但是,,

所以解构函数并不参数数量相同的重载,哪怕参数类型不一致
C#7.0中的解构功能---Deconstruct的更多相关文章
- 【JS】325- 深度理解ES6中的解构赋值
点击上方"前端自习课"关注,学习起来~ 对象和数组时 Javascript 中最常用的两种数据结构,由于 JSON 数据格式的普及,二者已经成为 Javascript 语言中特别重 ...
- WCF学习之旅—WCF4.0中的简化配置功能(十五)
六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提 ...
- ES6中的解构
数组中的解构: 输出 : 白板 幺鸡 二条 对象的解构: 输出: 老王 12 数组的结构用[];对象的解构用{}:一定要区分它是数组还是解构. 区分方法:看 它是在赋值还是在拿值,等号左边,都为解构, ...
- ES6中的解构赋值
在解释什么是解构赋值前,我们先来看一下, ES5 中对变量的声明和赋值. var str = 'hello word'; 左边一个变量名,右边可以是字符串,数组或对象. ES6 中增加了一种更为便捷的 ...
- ES2015中的解构赋值
ES2015中允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,被称为”解构(Destructering)“. 以前,为变量赋值,只能指定值. /** * 以前,为变量赋值,只能直接指定值 * ...
- ASP.Net4.0中新增23项功能
这篇文章介绍Visual Studio 2010 (ASP.Net 4.0)的新功能. 1.代码片段(Code Snippets): 代码段是预先开发的代码模板,可以节省我们对有关语法思考的时间.在V ...
- 用ASP.NET Core 1.0中实现邮件发送功能
准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试 ...
- JS中的解构
先看看数组解构: function fn(){ return [1,2,3]; } var [a,b,c] = fn(); console.log(a,b,c); // 1 2 3 var [d,,f ...
- JavaScript 中对象解构时指定默认值
待解构字段为原始值 正常情况下, const obj = { a: 1, b: 2, }; const { a, b } = obj; console.log(a, b); // 1 2 当被解构字段 ...
随机推荐
- DriverManager 驱动管理器类简介 JDBC简介(三)
驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中 后续的处理就可以对这个列表进行操作 简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动 概述 ...
- [三]java8 函数式编程Stream 概念深入理解 Stream 运行原理 Stream设计思路
Stream的概念定义 官方文档是永远的圣经~ 表格内容来自https://docs.oracle.com/javase/8/docs/api/ Package java.util.s ...
- AppBoxFuture(二): Say goodbye to sql!
信息管理类应用系统离不开关系数据存储,目前大家基本都使用的是传统的数据库如MySql.Postgres等.作者从事信息化建设十多年,个人认为传统的数据库存在以下的问题: 扩展问题: 系统数据的 ...
- 如何将html特殊字符编码转换成特殊字符_html十进制编码字符转回来
备注:有时候我们会莫名其妙遇到一些特殊字符: 这些字符在网页上能正常显示,但是在APP特殊情景并不识别这些字符: 如:' 这个其实是单引号: ' 百度后发现,它其实是HTML特殊 ...
- Captcha服务(后续1)
既然标题为后续,就要放一下上一篇文章使用.Net Core 2.1开发Captcha图片验证码服务 继续挖坑 时隔7个月再次继续自己在GitHub上挖的坑 https://github.com/Puz ...
- SpringBoot 整合 apollo
简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...
- Hibernate框架笔记01_环境搭建_API_CRUD
目录 1. Hibernate框架的概述 1.1 什么是框架 1.2 经典三层架构 1.3 Hibernate框架 2 Hibernate入门 2.1 下载Hibernate的开发包 2.2 创建项目 ...
- GNOME图形界面的基本操作
成功登录进入CentOS系统之后,我们首先看到的桌面就是GNOME图形界面,下面来看一下相关的基本操作. 个性化设置 1,设置屏幕分辨率 进入菜单 2,更换桌面背景 进入下面菜单. 选择一张背景图片, ...
- nodejs 搭建简易服务器
www文件夹下 template文件夹下 server.js代码: const express=require('express'); const static=require('express-st ...
- 搞懂 JavaScript 继承原理
在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的 new 到底是干什么的 1. 什么是 JS 原型链? 我们知道 JS 有对象,比如 var ob ...