C# 7.0中解构功能详解
作者:莫问今朝乄 发布时间:2022-08-11 21:06:34
标签:C#,解构
本文为大家分享了C# 7.0中的解构功能,供大家参考,具体内容如下
解构元组
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 ("张三", 11);
}
可以看到解构元组可以写出优雅的代码,并且可以使用类型推断,但在这里解构元组并不是重点,所以不过多关注,下面说一个有趣的功能
解构对象
解构能力并不是只能解构元组,他还有一个更加有意思的功能,就是解构对象。是不是听起来挺有意思。
static void Main(string[] args)
{
var user = new User
{
Name = "张三",
Age = 11,
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 = 11,
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;
}
}
但是解构不支持参数一致的重载
哪怕参数类型不一致
感觉像参数类型推断错误,但是
所以解构函数并不参数数量相同的重载,哪怕参数类型不一致。
来源:https://www.cnblogs.com/yan7/p/9501638.html


猜你喜欢
- Java基础编写猜数游戏,供大家参考,具体内容如下设计内容及要求产生一个100以内的随机数,游戏者进行猜数,猜中即胜,猜不中,提示是大了还是
- 本文实例讲述了java swing实现的扫雷游戏及改进版。分享给大家供大家参考,具体如下:版本1:package awtDemo;impor
- Java时间格式转换大全import java.text.*;import java.util.Calendar;public class
- 1 什么是WMI?Windows Management Instrumentation (WMI)是可伸缩的系统管理结构,该规范采用一个统一
- 概念 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关
- 前言Spring5带来了新的响应式web开发框架WebFlux,同时,也引入了新的HttpClient框架WebClient。WebClie
- 部署到webapps目录启动本文使用的Spring版本为Spring6,SpringBoot版本为3,JDK为17,可能会和之前有细微不同,
- 前言在讲述线程池的前提 先补充一下连接池的定义连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用可以看到其连接
- 目录一、Gradle相比Maven的优势二、基本配置三、最佳实践四、总结一、Gradle相比Maven的优势配置简洁Maven是用pom.x
- 刚开始学习Service的时候以为它是一个线程的封装,也可以执行耗时操作。其实不然,Service是运行在主线程的。直接执行耗时操作是会阻塞
- 本文实例讲述了C#交错数组用法。分享给大家供大家参考。具体分析如下:交错数组是数组的数组,交错数组的元素可以是不同的尺寸和大小。交错数组有时
- 一、实战-内存溢出堆内存溢出栈内存溢出方法区溢出直接内存溢出二、实战-堆内存溢出演示堆内存溢出代码,并且定位问题总结堆内存溢出的场景与解决方
- 前言RecyclerView是我们常用的列表控件,一般来说当Item的数据改变的时候我们需要刷新当前的Item 。如何刷新 RV 的列表?基
- 方法一(推荐):设置datetimepicker的属性ShowCheckBox为true在窗口初始化时候,添加代码this.datetime
- 前言很多时候,我们定义接口或者调用别人的接口时,手里只有一份接口文档,文档中提供一段示例json格式的报文,我们需要根据json中的字段,挨
- 一、简介JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCa
- 一、TCP/IP简介TCP/IP协议族是互联网使用的协议,也可以用在独立的专用网络中。TCP/IP协议族包括了IP协议、TCP协议和UDP协
- 1、运算符两边的变量为boolean变量时 先列出代码:public clas
- 一、using语句using可以算是.NET中新的语法元素,它清楚地说明一个通常比较占用资源的对象何时开始使用和何时被手动释放。当using
- 我们知道,使用nginx作为文件下载服务器,可以极大地降低对后端Java服务器的负载冲击,但是nginx本身并不提供授权控制,因此好的方案是