日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
你了解C#中的解構(gòu)嗎?

本文轉(zhuǎn)載自微信公眾號(hào)「精致碼農(nóng)」,作者liamwang  。轉(zhuǎn)載本文請(qǐng)聯(lián)系精致碼農(nóng)公眾號(hào)。

創(chuàng)新互聯(lián)建站成都網(wǎng)站建設(shè)定制開發(fā),是成都網(wǎng)站維護(hù)公司,為生料攪拌車提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開發(fā)等。成都網(wǎng)站建設(shè)熱線:13518219792

解構(gòu)是將一個(gè)對(duì)象分割成若干部分并將其存儲(chǔ)到新的變量中。在 C# 中,解構(gòu)可以方便地一次性將一個(gè)對(duì)象的多個(gè)成員的值存儲(chǔ)到多個(gè)變量中。

1.解構(gòu)元組

元組為方法返回多個(gè)值提供了便捷,無需創(chuàng)建額外的類型來承載返回的值。例如,下面這個(gè)方法使用元組返回兩個(gè)值:

 
 
 
  1. public static (string, string, int) GetPerson() 
  2.     var firstName = "Liam"; 
  3.     var lastName = "Wang"; 
  4.     var age = 18; 
  5.     return (firstName, lastName, age); 

對(duì)于檢索這個(gè)方法返回元組的各成員,如果不使用解構(gòu),我們可能需要這樣寫:

 
 
 
  1. var person = GetPerson(); 
  2.  
  3. var firstName = person.Item1; 
  4. var lastName = person.Item2; 
  5. var age = person.Item3; 

使用解構(gòu),則可以一次性將元組的各成員分別賦值給不同的變量,可以這樣寫:

 
 
 
  1. (string firstName, string lastName, int age) = GetPerson(); 
  2.  
  3. // firstName = "Liam" 
  4. // lastName = "Wang" 
  5. // age = 18 

也可以使用 var 自動(dòng)推斷各個(gè)變量的類型:

 
 
 
  1. var (firstName, lastName, age) = GetPerson(); 
  2.  
  3. // firstName = "Liam" 
  4. // lastName = "Wang" 
  5. // age = 18 

元組的解構(gòu)是基于成員的位置順序來的,即將 Item1 賦給第一上變量,將 Item2 賦給第二個(gè)變量……。

但是,一旦你使用解構(gòu)檢索元組,你就必須處理它的各個(gè)成員。我們可以使用 棄元(_)來處理我們不關(guān)心的成員,只獲取元組中的我們需要的部分成員。例如:

 
 
 
  1. var (firstName, _, _) = GetPerson(); 
  2.  
  3. // firstName = "Liam" 

2.解構(gòu)類

我們也可以對(duì)類進(jìn)行解構(gòu),并像對(duì)元組那樣訪問特定的字段。但為了實(shí)現(xiàn)這個(gè)目的,我們需要給類添加一個(gè) Deconstruct() 方法,例如:

 
 
 
  1. public class Person 
  2.     public string FirstName { get; set; } 
  3.     public string LastName { get; set; } 
  4.     public int Age { get; set; } 
  5.  
  6.     public void Deconstruct(out string firstName, out string lastName, out int age) 
  7.     { 
  8.         firstName = FirstName; 
  9.         lastName = LastName; 
  10.         age = Age; 
  11.     } 

然后可以和元組對(duì)象一樣使用解構(gòu):

 
 
 
  1. var person = new Person { FirstName = "Liam", LastName = "Liam", Age = 18 }; 
  2.  
  3. var (firstName, lastName, age) = person; 

或只關(guān)心部分成員:

 
 
 
  1. ... 
  2.  
  3. var (firstName, _, _) = person; 

Deconstruct() 方法允許重載,比如:

 
 
 
  1. ... 
  2.  
  3. public void Deconstruct(out string firstName, out string lastName) => 
  4.     (firstName, lastName) = (FirstName, LastName); 
  5.  
  6. public void Deconstruct(out string firstName, out string lastName, out int age) => 
  7.     (firstName, lastName, age) = (FirstName, LastName, Age); 

它會(huì)根據(jù)解構(gòu)時(shí)的聲明的變量數(shù)調(diào)用對(duì)應(yīng)的 Deconstruct() 方法。

 
 
 
  1. ... 
  2.  
  3. var (firstName, lastName) = person; 
  4.  
  5. var (firstName, lastName, age) = person; 

也可以通過靜態(tài)擴(kuò)展方法的方式給類的實(shí)例添加 Deconstruct() 方法,比如:

 
 
 
  1. public static class PersonExtensions 
  2.     public static void Deconstruct(this Person person, 
  3.       out string firstName, out string lastName, out int age) 
  4.     { 
  5.         firstName = person.FirstName; 
  6.         lastName = person.LastName; 
  7.         age = person.Age; 
  8.     } 

3.解構(gòu)記錄

C# 9 的記錄(Record)類型和元組一樣,可以根據(jù)成員順序直接解構(gòu)。例如:

 
 
 
  1. record Person(string FirstName, string LastName, int age); 
  2.  
  3. static void Main(string[] args) 
  4.     var person = new Person("Liam", "Wang", 18); 
  5.  
  6.     var (firstName, lastName, age) = person; 
  7.  
  8. // firstName = "Liam" 
  9. // lastName = "Wang" 
  10. // age = 18 

 記錄類型既可以和類一樣有具名成員,也可以和元組一樣有基于成員順序的可解構(gòu)特性,不需要單獨(dú)定義 Deconstruct() 方法。


文章題目:你了解C#中的解構(gòu)嗎?
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/dpeseis.html