C#7.0中的解构功能—Deconstruct「建议收藏」

C#7.0中的解构功能—Deconstruct「建议收藏」解构元组  C#7.0新增了诸多功能,其中有一项是新元组(ValueTuple),它允许我们可以返回多个值,并且配合解构能更加方便的进行工作,如下面例子staticvoidMain(string[]args){(varname,varage)=GetUser();Console.WriteLine($”name:{name}\nage:{age}…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

解构元组

  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);
}

Jetbrains全家桶1年46,售后保障稳定

  可以看到解构元组可以写出优雅的代码,并且可以使用类型推断,但在这里解构元组并不是重点,所以不过多关注,下面说一个有趣的功能

解构对象

  解构能力并不是只能解构元组,他还有一个更加有意思的功能,就是解构对象。是不是听起来挺有意思。

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;
    }
}

  但是解构不支持参数一致的重载

  C#7.0中的解构功能---Deconstruct「建议收藏」

  哪怕参数类型不一致

  C#7.0中的解构功能---Deconstruct「建议收藏」

  C#7.0中的解构功能---Deconstruct「建议收藏」

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

  C#7.0中的解构功能---Deconstruct「建议收藏」

  所以解构函数并不参数数量相同的重载,哪怕参数类型不一致

  

 

转载于:https://www.cnblogs.com/yan7/p/9501638.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/203531.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 4k纸是几厘米乘几厘米_4k素描纸是多大? 是几乘几的?

    4k纸是几厘米乘几厘米_4k素描纸是多大? 是几乘几的?展开全部4K的尺寸:35cm*38cm目前有“国际大度”和“国际正度”的两种标准。国际大度四开纸的长宽为:58×62616964757a686964616fe58685e5aeb93133336566613743cm;国际正度四开纸的长宽为:53×37.5cm。通常使用国际大度标准为多,整数计算长:53cm,宽:38cm。素描约4K,8K,32K这些是指对应的纸张的大小。4K的尺寸:35cm*38…

  • pycharm virtualenv和conda_pycharm virtualenv

    pycharm virtualenv和conda_pycharm virtualenvfrom: http://www.cnblogs.com/IDRI/p/6354237.htmlLinux:启动虚拟环境:sourceenv/bin/activate Windows:pipinstallvirtualenv创建虚拟环境目录env激活虚拟环境:C:\Python27\Scripts

  • 5G NR SRS (R15)[通俗易懂]

    5G NR SRS (R15)[通俗易懂]一、SRS序列对于SRS序列生成,其延续了LTE中采用的ZC序列,具体公式如下:[参考协议382115.2.2][参考协议382116.4.1.4.2]二、SRS时频资源1.时频资源NR中网络可以为终端配置一个或多个SRS资源集,多个资源集的目的可能是为了上下行多天线预编码,也有可能是为了上下行波束管理。一个SRS资源集内可以包含一个或多个SRS资源,每个SRS资源占…

    2022年10月22日
  • 三维重建技术概述_CT三维重建不包括

    三维重建技术概述_CT三维重建不包括基于视觉的三维重建,指的是通过摄像机获取场景物体的数据图像,并对此图像进行分析处理,再结合计算机视觉知识推导出现实环境中物体的三维信息。1.相关概念(1)彩色图像与深度图像彩色图像也叫作RGB图像,R、G、B三个分量对应于红、绿、蓝三个通道的颜色,它们的叠加组成了图像像素的不同灰度级。RGB颜色空间是构成多彩现实世界的基础。深度图像又被称为距离图像,与灰度图像中像素点存储亮度值不同,其像素点存储的

    2022年10月31日
  • C++ – 容器(container)的erase()函数

    C++ – 容器(container)的erase()函数

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号