.NET Framework 4.0之Tuple(元組)


Tuple,是函數式編程的概念之一,早見於Elang、F#等動態語言。Tuple類型像一個口袋,在出門前可以把所需的任何東西一股腦地放在里面。您可以將鑰匙、駕駛證、便箋簿和鋼筆放在口袋里,您的口袋是存放各種東西的收集箱。C# 4.0引入的一個新特性 Tuple類型與口袋類似,它可以存放不同類型的對象。

C# 4.0之前我們函數有多個返回值,通常是使用ref,out 。到了c# 4.0 應當使用元組Tuple而不是使用輸出參數,在任何時候都應避免使用ref/out傳遞參數,尤其對引用類型(禁止引用的引用,嘗試改進你的設計。

數組合並了相同類型的對象,而元組合並了不同類型的對象。元組起源於函數編程語言(如F#) ,在這些語言中頻繁使用元組。.NET 4定義了8個泛型Tuple類和一個靜態Tuple類,它們用作元組的工廠。這里的不同泛型Tuple類支持不同數量的元素。例如,Tuple<T1>包含-個元素,Tuple<T1,T2>包含兩個元素,以此類推。

為什么要用Tuple呢?這是個值得權衡的問題,上述MyRequest類型中通過3-Tuple對需要的Request信息進行封裝,我們當然也可創建一個新的struct來封裝,兩種方式均可勝任。然則,在實際的編程實踐中,很多時候我們需要一種靈活的創建一定數據結構的類型,很多時候新的數據結構充當着“臨時”角色,通過大動干戈新類型完全沒有必要,而Tuple既是為此種體驗而設計的。例如:

Point {X, Y},可以表示坐標位置的數據結構。
Date {Year, Month, Day},可以表示日期結構;Time {Hour, Minute, Second},可以表示時間結構;而DateTime {Date, Time}則可以實現靈活的日期時間結構。
Request {Name, URL, Result},可以表示Request的若干信息。
。。。,隨需而取。

優略之間
當前,.NET 4.0預定義的Tuple類型僅有8個,所以我們應考慮對於Tuple提供適度擴展的可能, 然而遺憾的是ITuple類型被實現為internal,所以我們無法繼承ITuple,只好自定義類似的實現:

優勢所在:
為方法實現多個返回值體驗,這是顯然的,Tuple元素都可以作為返回值。
靈活的構建數據結構,符合隨要隨到的公仆精神。
強類型。

不足總結:
當前Tuple類型的成員被實現為確定值,目前而言,還沒有動態決議成員數量的機制

一個簡單的例子:

1 public class MyRequest
2 {
3     public Tuple<string, Uri, DateTime> GetMyRequest()
4     {
5         return Tuple.Create<string, Uri, DateTime>("anytao.com", new Uri("http://anytao.net/"), DateTime.Now);
6     }
7 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM