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)
blank

相关推荐

  • windows计算哈希值_哈希校验

    windows计算哈希值_哈希校验哈希算法校验

  • SIGPIPE[通俗易懂]

    SIGPIPE[通俗易懂]当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件.最后问题确

  • mybatis中的动态sql表现为_MybatisPlus

    mybatis中的动态sql表现为_MybatisPlus如何分页查询Mybatis如何分页查询?Mysql中可以使用limit语句,但limit并不是标准SQL中的,如果是其它的数据库,则需要使用其它语句。MyBatis提供了RowBounds类,用于实现分页查询。RowBounds中有两个数字,offset和limit。MyBatis如何利用RowBounds

  • Android hybrid_android混合开发

    Android hybrid_android混合开发关于混合开发常问道的问题:Android如何嵌套h5页面?h5一般调用哪些Android哪些接口功能?Android如何调用网页(js)功能?问题1.ndroid如何嵌套h5页面答案:当我们用vue开发完项目,执行nmprunbuild打包生产dist目录,如何嵌套在Android框架中创建网页存放文件夹,在Android工程res下面添加assets文件夹,把dist目录内容拷贝到assets下。找到Android项目中.xml布局文件,添加webview组件及设置web

  • 即期利率和远期利率的区别「建议收藏」

    即期利率和远期利率的区别「建议收藏」一、考点精讲1、即期利率金融市场的基本利率,以St表示,指已设定到期日的零息票债券的到期收益率,表示的是从现状到未来时间t的年华收益率。利率和本金都是在时间t支付的。2、远期利率指资金的远期价格,隐含

发表回复

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

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