成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你了解C#中的解構嗎?

開發 后端
解構是將一個對象分割成若干部分并將其存儲到新的變量中。在 C# 中,解構可以方便地一次性將一個對象的多個成員的值存儲到多個變量中。

[[413412]]

本文轉載自微信公眾號「精致碼農」,作者liamwang  。轉載本文請聯系精致碼農公眾號。

解構是將一個對象分割成若干部分并將其存儲到新的變量中。在 C# 中,解構可以方便地一次性將一個對象的多個成員的值存儲到多個變量中。

1.解構元組

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

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

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

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

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

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

也可以使用 var 自動推斷各個變量的類型:

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

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

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

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

2.解構類

我們也可以對類進行解構,并像對元組那樣訪問特定的字段。但為了實現這個目的,我們需要給類添加一個 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.     } 

然后可以和元組對象一樣使用解構:

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

或只關心部分成員:

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

它會根據解構時的聲明的變量數調用對應的 Deconstruct() 方法。

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

也可以通過靜態擴展方法的方式給類的實例添加 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.解構記錄

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

  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 

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

 

責任編輯:武曉燕 來源: 精致碼農
相關推薦

2023-09-26 07:38:53

c#Lambda表達式

2024-08-22 08:17:55

C#工具循環

2015-10-26 10:01:33

解構C#小數運算

2012-02-06 13:52:33

JavaScript

2021-04-14 06:53:52

C# 修飾符 Public

2023-11-09 08:22:38

2024-09-12 08:20:39

2025-02-17 08:18:27

C#TypeScriptJavaScript

2021-11-26 08:07:16

MySQL SQL 語句數據庫

2009-08-12 13:56:26

C# Hashtabl

2023-05-05 08:41:16

SQL字符函數

2024-04-15 00:02:00

Java補丁技術

2009-06-05 10:24:37

C#排序排序

2019-10-31 08:36:59

線程內存操作系統

2021-01-07 05:40:13

BLE模塊Android

2025-03-06 00:33:09

動態編程C#

2024-01-18 09:07:04

Errors函數Golang

2018-12-21 11:24:55

Java時間處理編程語言

2015-04-20 11:19:15

2018-11-21 09:32:10

IT云計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区免费 | 成人在线观看免费 | 中文字幕1区2区3区 日韩在线视频免费观看 | 国产精品国色综合久久 | 亚洲1区| 国产欧美精品区一区二区三区 | 久久亚洲一区 | 欧美一级α片 | 久久99精品久久久久久琪琪 | 国产成人啪免费观看软件 | 欧美一级精品片在线看 | 久久机热| 欧美精品1区 | 亚洲久视频 | 亚洲精品日韩一区二区电影 | 丁香一区二区 | 一二三四在线视频观看社区 | 日韩精品一区二区三区在线观看 | 成人午夜免费福利视频 | 拍拍无遮挡人做人爱视频免费观看 | 久久一区 | 久久这里只有 | 人人九九| 欧美性网 | 午夜亚洲 | 久久久精品一区二区三区 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国产精品成人国产乱 | 亚洲不卡一 | 久久国产精品久久久久久 | 欧美黄在线观看 | 亚洲欧美视频 | 日本亚洲欧美 | 日日爱夜夜操 | www四虎影视 | 久久午夜视频 | 欧美黑人一区 | 久亚州在线播放 | 亚洲精品视频在线 | 国产不卡在线播放 | 深夜福利亚洲 |