C# Deconstruct详解
创始人
2024-11-13 04:12:12
0

总目录


前言

该文来源于探索弃元的使用,由弃元了解到元组,由元组又了解到解构方法Deconstruct。
另外本文中 解构和析构一个意思,不要在意!


一、Deconstruct是什么?

1. 关于元组

如果我们想了解Deconstruct 的使用,那么得先了解了元组的使用,如果不了解的可查看C#元组的使用;熟悉的可以跳过。

2.Deconstruct基本介绍

  • 解构器 Deconstruct 可以视为构造方法的逆过程
  • MSDN 上关于Deconstruct 有这么一段描述:
    除了 record 和 DictionaryEntry 类型,C# 不提供解构非元组类型的内置支持。 但是,用户作为类、结构或接口的创建者,可通过实现一个或多个 Deconstruct方法来析构该类型的实例。 该方法返回 void,且要析构的每个值由方法签名中的 out 参数指示。

二、解构元组

C#7.0新增了诸多功能,其中有一项是新元组(ValueTuple),它允许我们可以返回多个值,并且配合解构能更加方便的进行工作,如下面例子

        static void Main(string[] args)         {             (var name, var age) = GetUser();             Console.WriteLine($"name:{name}\t age:{age}");                          Console.ReadLine();         }         //该方法 返回类型为 元组          public static (string name, int age) GetUser()         {             return ("张三", 33);         } 

马上就会有人说了,这个没什么啊,这个方法返回的就是元组,用(var name, var age) 去接收值也都属于基操啊,无非就是多了个类型推断罢了。


(var name, var age) = GetUser(); 这个接受的过程,我称之为解构元组。之所以元组可以使用上面如此简洁的代码进行解构,是因为C#提供解构元组类型的内置支持。那么下面我们看下如果是我们自定义的类想要被解构呢?

三、解构对象

如果我们希望我定义的类也能被解构,我们需要知道用户作为类、结构或接口的创建者,可通过实现一个或多个 Deconstruct方法来析构该类型的实例。 该方法返回 void,且要析构的每个值由方法签名中的 out 参数指示。

1 创建类以及定义Deconstruct方法

  • 创建一个类、结构或接口
  • 定义一个或多个Deconstruct方法,方法名必须是Deconstruct
  • 该方法必须返回void ,参数列表中的每个参数必须是out ,还必须是public
	//1 创建一个Student 类     public class Student     {         public string Name { get; set; }         public int Age { get; set; }         public string Sex { get; set; }         //定义一个析构函数         public void Deconstruct(out string name, out int age)         {             name = Name;             age = Age;         }          //Deconstruct 的重载,可以有多个         public void Deconstruct(out string name, out int age, out string sex)         {             name = Name;             age = Age;             sex = Sex;         }     } 

2 使用元组 解构 Deconstruct方法的值
定义了解构函数如何使用呢?
我们通常使用元组来解构 Student这个类中解构函数的值。

        static void Main(string[] args)         {             var student = new Student             {                 Name = "张十八",                 Age = 18,                 Sex = "男"              };             // 通过两个参数的解构函数解构             (var name, var age) = student;             Console.WriteLine($"name:{name}\t age:{age}");  			//通过三个参数的解构函数解构             (var name2,var age2,var sex2)= student;             Console.WriteLine($"name:{name}\t age:{age}\t sex:{sex2}");         } 

我们发现这样的代码,更加的优雅,不需要通过student.Name这种形式将数据一个个的接受,而是可以定义解构函数,有选择性的一次性接受需要的数据

四、实例解构的对称性

实例解构与构造器的元组赋值有一种对称的美

    public class Point     {         int X;         int Y;         //构造函数         public Point(int x, int y) => (X, Y) = (x, y);         //解构函数         public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);      } 

结语

希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。


参考资料:
C#7.0中的解构功能—Deconstruct
快速使用C#解构器Deconstruct

相关内容

热门资讯

金花链接房卡如何充值/上下分金... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
给大家讲解“可以一起创房的牛牛... 卡贝大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
房卡必备教程“微信金花房卡怎样... 新上游牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
微信拼三张房卡哪里购买/微信炸... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
金花链接房卡到哪里买/微信斗牛... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来...
一分钟了解“微信炸金花房卡链接... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡...
秒懂教程“微信上玩炸金花冲房卡... 新卡农是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来...
一分钟推荐“微信金花群怎么买房... 新九天是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享...
可以一起创房的牛牛/微信金花链... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
给大家讲解“微信炸金花房间在哪... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡...
牛牛金花房卡链接在哪买/金花链... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...
给大家讲解“微信斗牛房卡怎么买... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
秒懂教程“斗牛房间如何开启房卡... 卡米大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来...
一分钟了解“微信开金花群房卡/... 起点大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来...
牛牛链接房卡在哪里弄/购买斗牛... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
微信金花房卡找谁拿/软件炸金花... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
微信链接金花房卡如何购买/微信... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
终于找到“金花房卡平台购买联系... 悠悠大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
终于找到“微信炸金花房卡链接在... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
微信金花链接在哪买/炸金花房间... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...