C#7.0中的解構功能---Deconstruct

來源:互聯網
上載者:User
解構元組

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

  但是解構不支援參數一致的重載

  

  哪怕參數類型不一致

  

  

  感覺像參數類型推斷錯誤,但是,,

  

  所以解構函數並不參數數量相同的重載,哪怕參數類型不一致

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.