最近做一題關于泛型傳回值的題,結果發現:
1:很多人做錯誤了;
2:很多人疑問,泛型作為傳回值有什麼意義;
題目如下:
“編寫一個函數,要求輸入的參數和輸出的結果都是泛型。”
(PS:評論中有人指出,題目本身有問題,更合适的描述是:編寫一個函數,要求輸入參數和傳回值的類型都是泛型類型參數)
典型的錯誤回答之一:
典型的錯誤回答之二:
關于錯誤回答1,是因為一想到泛型,很多人便想到集合,沒錯,泛型集合是泛型的一個重要應用場景,但是,這跟泛型本身有什麼關系。
很多人自然就提出來第二個疑問,那讓泛型作為傳回值,有什麼意義呢,我們先來且看下面的例子:
這是remoting中的一個例子,完成的功能是傳回一個遠端對象的執行個體。如果沒有泛型,我們需要為每個遠端對象執行個體的建立都建立一個方法,而有了泛型之後,可以很友善解決這個問題。(PS:本句欠妥,評論指出“沒有泛型的時候我們也可以傳個Type進去再在外面強制類型轉換”,是以,本句說的“解決這個問題”中的這個問題,不應是指編碼更少,更美觀,而更應該是但“使用泛型是高效并類型安全的”)
調用的代碼為:
另外,如果大家對LINQ熟悉的話,會發現LINQ中有不少方法也使用了泛型傳回值,我們來舉一個非常有用的集合方法Find,以下是這個方法的标準實作(.NET内部代碼):
其标準的調用代碼如:
最後,附上本題的标準答案: