*分解元組(Deconstructing tuples)的支援必須要至少C# 7.0以上*
以前一個funtion如果需要回傳複數個參數你會怎麼做呢?
1.可能會定義一個物件,在回傳的時候宣告並將值塞進去return。(為了一個function而去定義,好醜...)
2.又或者是將回傳參數型別直接改成dynamic,回傳時直接使用匿名物件。(performance炸裂!!!)
如果你使用了上面兩種方式...請一定!一定!!一定!!!要把這篇文章看完。
先來說說在C#7.0以前的處理方法,在呼叫function之前先將欲接收的參數宣告好並傳入。
但是這樣做有幾個缺點,
1. 當傳入的參數與傳出的參數一多起來,function定義時的參數會又臭又長。
2. 使用這個function前每次都需要宣告變數,不累嗎?
3. 不管你要不要使用這個參數,你都一定要傳入,因為ref與out不能有預設值。
接下來...讓我與各位介紹 " 元 組 元 素 "!!! (Tuple)
早上好台灣,現在我有Tuple。我很喜歡Tuple,但是速度與激情9比...咳咳...沒事。
先來個簡單的範例
定義一個funciton JohnCena
然後我們就可以很漂亮的一次性取得JohnCena的姓名、出生日期、國籍、年齡等等資料!
假如你的參數需要在外面先行宣告也沒問題!
而從C#10開始,甚至可以混合使用也沒關係!
這樣我們就輕鬆解決了以前的兩個缺點了,而要解決最後一個缺點更是簡單,
只需要將你想要丟棄(discard)或是用不到的那個參數使用UnderLine( _ )就可以囉!
元組元素的基礎講完了再來說說解構元素的部分
建構式想必大家都已經很熟悉了
但是'分解式'你有聽過嗎?
顧名思義就是可以定義物件被指派出去的參數!
驚不驚喜! 意不意外?
使用的方法就是在class底下新增一個Deconstruct function
如此一來我們就可以來試試看將John Cena解ㄊ一.... 分解!
建構式可以多載,分解式當然也可以!
以上就是這次的內容,有沒有覺得Coding時的可玩性又更好了呢?
不過要提醒一點,目前解構式並無法使用查看定義來移置相對應的位置,
對於可讀性會有不小的影響,但如果你想要把某個東西藏起來不讓你同事找到... (請不要這樣做!)
這次的範例也歡迎到我的GitHub參考囉!
06/09/2022 由Bike 補充
可以將function的回傳參數先行命名!!
直接當成物件使用,對開發效率與可讀性有著明顯的提升,相信會是未來的趨勢。
另外要道歉並修正之前將Deconstruct翻譯成解構式的錯誤
Destruct (解構式)指的是class生命周期結束前執行的function
使用方式是class名稱為dunction名稱並在前面加上波浪符號 '~'
Deconstruct的翻譯應該為分解式