C# 對(duì)位模式
1、語法
X
和 Y
是 Point
Deconstruct
方法,然后帶有兩個(gè)參數(shù):x
和 y
,它們都是 out int
通過這樣的賦值后,我們就可以通過這個(gè)解構(gòu)來完成數(shù)據(jù)的解構(gòu)了:
當(dāng)然,在模式匹配的時(shí)候,我們可以使用這樣的代碼對(duì)上面的寫法進(jìn)行簡化:
不過,這樣還不是很好看。因此 C# 還有這樣的對(duì)位模式匹配:
x
和 y
,是因?yàn)榻鈽?gòu)函數(shù)的參數(shù)分別是 x
和 y
,這是一一對(duì)應(yīng)的。正是因?yàn)槿绱耍@個(gè)模式才叫做對(duì)位模式。其中,因?yàn)樗柚私鈽?gòu)函數(shù),而解構(gòu)后的對(duì)象分配使用的是一對(duì)小括號(hào)(var (x, y) = point;
這個(gè)語句),因此為了配合這個(gè)寫法,也用的是小括號(hào)。只是這里需要寫出解構(gòu)參數(shù)的名字。
稍微注意一點(diǎn)的是,C# 允許在同一個(gè)數(shù)據(jù)類型下定義多個(gè)解構(gòu)函數(shù),所以這正是為什么必須給出解構(gòu)參數(shù)名稱的原因。除非這個(gè)類型就這一個(gè)解構(gòu)函數(shù),那么我們都必須寫出解構(gòu)參數(shù)名。
2、主構(gòu)造器的對(duì)位模式
C# 9 和 C# 10 分別誕生了記錄類型和記錄結(jié)構(gòu)類型,它們必須綁定一個(gè)主構(gòu)造器位于聲明的頭部:
在使用模式匹配的時(shí)候,由于編譯器會(huì)自動(dòng)生成對(duì)應(yīng)的解構(gòu)函數(shù),因此我們可以直接對(duì)主構(gòu)造器使用對(duì)位模式匹配。
其中,小括號(hào) (Name: "Sunnie", Age: 25, _)
左側(cè)的數(shù)據(jù)類型類似于 obj is T t
的 T
,而小括號(hào)書寫出來的對(duì)位模式,則是 C# 允許的語法。它們甚至可以寫在一起。當(dāng)然,如果類型一樣就不必判斷類型了。
3、調(diào)用擴(kuò)展方法的對(duì)位模式
同時(shí),編譯器也能夠嗅探擴(kuò)展方法。換句話說,對(duì)位模式也允許擴(kuò)展方法的解構(gòu)函數(shù)。因此,C# 也允許調(diào)用擴(kuò)展方法的解構(gòu)函數(shù)來對(duì)位判斷元素信息。
T[]