日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中的解构

發布時間:2023/12/4 C# 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中的解构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

1解構元組

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

public?static (string, string, int) GetPerson() {var firstName = "Liam";var lastName = "Wang";var age = 18;return (firstName, lastName, age); }

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

var person = GetPerson();var firstName = person.Item1; var lastName = person.Item2; var age = person.Item3;

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

(string firstName, string lastName, int age) = GetPerson();// firstName = "Liam" // lastName = "Wang" // age = 18

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

var (firstName, lastName, age) = GetPerson();// firstName = "Liam" // lastName = "Wang" // age = 18

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

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

var (firstName, _, _) = GetPerson();// firstName = "Liam"

2解構類

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

public?class?Person {public?string FirstName { get; set; }public?string LastName { get; set; }public?int Age { get; set; }public?void?Deconstruct(out?string firstName, out?string lastName, out?int age){firstName = FirstName;lastName = LastName;age = Age;} }

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

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

或只關心部分成員:

...var (firstName, _, _) = person;

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

...public?void?Deconstruct(out?string firstName, out?string lastName) =>(firstName, lastName) = (FirstName, LastName);public?void?Deconstruct(out?string firstName, out?string lastName, out?int age) =>(firstName, lastName, age) = (FirstName, LastName, Age);

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

...var (firstName, lastName) = person;var (firstName, lastName, age) = person;

也可以通過靜態擴展方法的方式給類的實例添加 Deconstruct() 方法,比如:

public?static?class?PersonExtensions {public?static?void?Deconstruct(this Person person,out?string firstName, out?string lastName, out?int age){firstName = person.FirstName;lastName = person.LastName;age = person.Age;} }

3解構記錄

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

record?Person(string?FirstName, string?LastName, int?age);static?void?Main(string[] args) {var person = new Person("Liam", "Wang", 18);var (firstName, lastName, age) = person; }// firstName = "Liam" // lastName = "Wang" // age = 18

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

總結

以上是生活随笔為你收集整理的C#中的解构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。