如何使用 C# 中的 Tuple
開局一張圖,首先聲明的是 Tuple 不是什么新鮮概念,在編程語言 F#,Python 中早就有這個(gè)了,Tuple 是一種 有序的,有限不可變的,支持混雜類型的固定個(gè)數(shù)的 一種數(shù)據(jù)結(jié)構(gòu),有些朋友可能就想問了,這里的混雜是什么意思?其實(shí)就是說 Tuple 中的若干元素類型,即可以是同類型,也可以是不同類型。
值得注意的是,Tuple 中的元素是 只讀的,而且其元素的順序也是在 Tuple 創(chuàng)建的時(shí)候指定好的,不能對其中的元素進(jìn)行后續(xù)修改 也不能修改 Tuple 的大小。
為什么要使用 Tuple
下面羅列了幾種使用 Tuple 的場景:
如果你的方法需要返回多個(gè)值 或者 方法需要傳遞多個(gè)值。
如果你不想為某些功能專門去定義一個(gè)類。
如果你有若干個(gè)混雜元素,并且想提供對其簡單的訪問方式。
上面三種情況都是 Tuple 最擅長的應(yīng)用場景,值得用 Tuple 去解決。
有些朋友可能會想到 匿名類,但仔細(xì)想想, 匿名類 也有其缺陷,比如說方法的返回值是不可能指定為匿名類型的,對吧。
當(dāng)然 Tuple 也是有缺陷的,羅列如下:
當(dāng)你訪問 Tuple 中的元素時(shí),你會發(fā)現(xiàn)只能使用 Item1, Item2, Item3 這樣的形式,很顯然這種太不易讀了,而且一旦 Tuple 中的元素過多,維護(hù)起來也是一種負(fù)擔(dān)。
Tuple 是引用類型不是值類型,意味著它會在 托管堆 上進(jìn)行內(nèi)存分配,如果 Tuple 過大并且沒有很好的釋放,對程序也是一個(gè)不小的性能挑戰(zhàn)。
C# 中使用 Tuple
叨叨叨的說了這么多,接下來看看如何使用,在 C# 中提供了一個(gè) Tuple 類,這個(gè)類下有一個(gè)靜態(tài)方法 Create 可用來生成 Tuple 實(shí)例,順便提一下,這個(gè) Create 方法提供了 8 個(gè)重載方法,下面展示了這些方法簽名清單。
public?static?class?Tuple {public?static?Tuple<T1>?Create<T1>(T1?item1){return?new?Tuple<T1>(item1);}public?static?Tuple<T1,?T2>?Create<T1,?T2>(T1?item1,?T2?item2){return?new?Tuple<T1,?T2>(item1,?item2);}public?static?Tuple<T1,?T2,?T3>?Create<T1,?T2,?T3>(T1?item1,?T2?item2,?T3?item3){return?new?Tuple<T1,?T2,?T3>(item1,?item2,?item3);}public?static?Tuple<T1,?T2,?T3,?T4>?Create<T1,?T2,?T3,?T4>(T1?item1,?T2?item2,?T3?item3,?T4?item4){return?new?Tuple<T1,?T2,?T3,?T4>(item1,?item2,?item3,?item4);}public?static?Tuple<T1,?T2,?T3,?T4,?T5>?Create<T1,?T2,?T3,?T4,?T5>(T1?item1,?T2?item2,?T3?item3,?T4?item4,?T5?item5){return?new?Tuple<T1,?T2,?T3,?T4,?T5>(item1,?item2,?item3,?item4,?item5);}public?static?Tuple<T1,?T2,?T3,?T4,?T5,?T6>?Create<T1,?T2,?T3,?T4,?T5,?T6>(T1?item1,?T2?item2,?T3?item3,?T4?item4,?T5?item5,?T6?item6){return?new?Tuple<T1,?T2,?T3,?T4,?T5,?T6>(item1,?item2,?item3,?item4,?item5,?item6);}public?static?Tuple<T1,?T2,?T3,?T4,?T5,?T6,?T7>?Create<T1,?T2,?T3,?T4,?T5,?T6,?T7>(T1?item1,?T2?item2,?T3?item3,?T4?item4,?T5?item5,?T6?item6,?T7?item7){return?new?Tuple<T1,?T2,?T3,?T4,?T5,?T6,?T7>(item1,?item2,?item3,?item4,?item5,?item6,?item7);}public?static?Tuple<T1,?T2,?T3,?T4,?T5,?T6,?T7,?Tuple<T8>>?Create<T1,?T2,?T3,?T4,?T5,?T6,?T7,?T8>(T1?item1,?T2?item2,?T3?item3,?T4?item4,?T5?item5,?T6?item6,?T7?item7,?T8?item8){return?new?Tuple<T1,?T2,?T3,?T4,?T5,?T6,?T7,?Tuple<T8>>(item1,?item2,?item3,?item4,?item5,?item6,?item7,?new?Tuple<T8>(item8));} }接下來看看如何創(chuàng)建和初始化 Tuple。
????????????var?listEmployee?=?new?List<Tuple<int,?string,?string>>{Tuple.Create(1,?"Joydip?Kanjilal",?"INDIA"),Tuple.Create(2,?"Michael?Stevens",?"USA"?),Tuple.Create(3,?"Steve?Barnes",?"USA"?)};一旦你的 Tuple 創(chuàng)建并初始化好,你可以像迭代其他集合一樣迭代 Tuple,下面的代碼清單展示了如何去實(shí)現(xiàn)。
foreach?(Tuple<int,?string,?string>?tuple?in?listEmployee){Console.WriteLine(tuple.Item2);}下面是完整的代碼清單展示了如何去 創(chuàng)建,初始化,迭代。
static?void?Main(string[]?args){var?listEmployee?=?new?List<Tuple<int,?string,?string>>{Tuple.Create(1,?"Joydip?Kanjilal",?"INDIA"),Tuple.Create(2,?"Michael?Stevens",?"USA"?),Tuple.Create(3,?"Steve?Barnes",?"USA"?)};foreach?(Tuple<int,?string,?string>?tuple?in?listEmployee){Console.WriteLine(tuple.Item2);}Console.Read();}你也可以創(chuàng)建 嵌套的 Tuple,如下代碼所示:
static?void?Main(string[]?args){var?tuple?=?Tuple.Create(1,?"Joydip?Kanjilal",?new?Tuple<string,?string>("Hyderabad",?"India"));}譯文鏈接:https://www.infoworld.com/article/3095242/how-to-work-with-a-tuple-in-c.html
總結(jié)
以上是生活随笔為你收集整理的如何使用 C# 中的 Tuple的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IdentityServer4系列 |
- 下一篇: 一文说通C#中的异步迭代器