亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

深入理解C? 7.0中的Tuple特性

2019-10-29 21:12:03
字體:
來源:轉載
供稿:網友

caidan/18443.html">color: #ff0000">介紹

Tuple是異類對象的有序序列。 我們經??梢詫懗龇祷囟鄠€值的方法,所以我們需要創建一個包含多個數據元素的簡單結構。 為了支持這些情況,Tuple 被添加到 C#。 Tuple 是包含多個字段用來表示數據成員的輕量級數據結構。

如果一個方法返回多個相同類型的數值,那么它可以將這些值存儲在一個集合中并返回該集合。 但是如果一個方法需要返回多個不同類型的值呢,C# 提供了一些可選項,比如 Class / Struct,輸出參數和 Tuple。

讓我們創建一個示例。 我們有一個整數的集合,而且我們需要從這個集合中找出的最小值和最大值。 這時候我們需要創建一個返回最小值和最大值的方法。 為了實現這一點,我們有三個選項:Class / Struct,輸出參數和 Tuple。  那么,讓我們逐個看看每個選項是如何完成這一功能的。

使用 out 參數

當我們創建一個方法,找出數字序列中的最大值和最小值。 該方法需要將兩個值作為最大值和最小值的結果。 因此,我們創建返回值和使用 out 參數作為參數的方法。 返回值保存系列中的最大數,而 out 參數保存系列中的最小數。

讓我們創建一個名為 Operation 的類,它實現一個從數字系列中查找最小和最大數的方法。 以下代碼段就能實現該功能。

using System.Collections.Generic;  namespace TupleApp {  class Operation  {  internal int FindMinMax(List<int> list, out int min)  {   int maximum = int.MinValue, minimum = int.MaxValue;   list.ForEach(n =>   {   minimum = n < minimum ? n : minimum;   maximum = n > maximum ? n : maximum;   });   min = minimum;   return maximum;  }  } }

根據上述代碼片段,該方法返回一個值,該值保存一個名為 maximum 的整形變量。 該值是該系列的最大值。 此方法將輸出參數是名為 min 的參數,該參數保存的是系列中的最小值。

現在,根據下面的代碼片段從可執行程序調用此方法。

using System; using System.Collections.Generic; using System.Linq; using static System.Console;  namespace TupleApp {  class Program  {  static void Main(string[] args)  {   List<int> numbers = Enumerable.Range(1, 100).OrderBy(x => Guid.NewGuid()).Take(10).ToList();   int minimum = 0, maximum = 0;   Operation operation = new Operation();   maximum = operation.FindMinMax(numbers, out minimum);   Write($"{minimum} is min and {maximum} is max in {String.Join(",", numbers)}");   Read();  }  } }

現在,運行應用程序。 結果如下圖所示。

#d0930df8323cc572a9a424fb51c537fd#

圖1:輸出

這是正確的方法,但 out 參數并不適合于異步方法。

使用 Class/Struct

還有另一個選項可以從一個方法獲取多個值–創建一個具有該數據結構的類或結構體。 我們在這里也執行相同的操作。 我們創建一個名為 CalculateData 的結構體,這個結構體中有兩個屬性來保存一個系列的最大值和最小值。 以下代碼段就是用來創建這個結構體。

namespace TupleApp {  struct CalculateData  {  public int Minimum { get; set; }  public int Maximum { get; set; }  } }

現在,讓我們創建另一個名為 Operation 的類,它用來實現從數字序列中查找最小值和最大值的方法。 以下代碼段就是用來實現這一功能。

using System.Collections.Generic;  namespace TupleApp {  class Operation  {  internal CalculateData FindMinMax(List<int> list)  {   int maximum = int.MinValue, minimum = int.MaxValue;   list.ForEach(n =>   {   minimum = n < minimum ? n : minimum;   maximum = n > maximum ? n : maximum;   });   CalculateData data = new CalculateData   {   Minimum = minimum,   Maximum = maximum   };   return data;  }  } }

根據上面的代碼片段,該方法返回一個具有兩個屬性的對象。 這些屬性里保存的是系列中的最大值和最小值。
現在,從可執行程序調用此方法,如下面的代碼片段所示。

using System; using System.Collections.Generic; using System.Linq; using static System.Console;  namespace TupleApp {  class Program  {  static void Main(string[] args)  {   List<int> numbers = Enumerable.Range(1, 100).OrderBy(x => Guid.NewGuid()).Take(10).ToList();   Operation operation = new Operation();   CalculateData data = operation.FindMinMax(numbers);   Write($"{data.Minimum} is min and {data.Maximum} is max in {String.Join(",", numbers)}");   Read();  }  } }

現在,運行應用程序。 最終結果如下圖所示。

c,7,tuple,7.0,tuple使用

圖2: 輸出結果

使用 Tuple

C#7 引入了定義元組的新方法。 Tuple 是從方法返回多個值的另一個選擇。 它可以保存多個不同類型的值。 要在應用程序中使用 Tuple,我們需要安裝 System.ValueTuple NuGet 包.

c,7,tuple,7.0,tuple使用

圖3 NuGet 包

我們在這里也執行相同的操作。 讓我們創建一個名為 Operation 的類,它實現一個從數字系列中查找最小值和最大數的方法。 以下代碼段用來實現該功能。

using System.Collections.Generic;  namespace TupleApp {  class Operation  {   internal (int, int) FindMinMax(List<int> list)   {    int maximum = int.MinValue, minimum = int.MaxValue;    list.ForEach(n =>    {     minimum = n < minimum ? n : minimum;     maximum = n > maximum ? n : maximum;    });    return (minimum, maximum);   }  } }

根據上面的代碼片段,該方法返回一個有兩個項目的元組。 這些項目保存數字系列的最大值和最小值。

現在,根據下面的代碼片段在可執行程序調用這個方法。

using System; using System.Collections.Generic; using System.Linq; using static System.Console;  namespace TupleApp {  class Program  {   static void Main(string[] args)   {    List<int> numbers = Enumerable.Range(1, 100).OrderBy(x => Guid.NewGuid()).Take(10).ToList();    Operation operation = new Operation();    (int, int) data = operation.FindMinMax(numbers);    Write($"{data.Item1} is min and {data.Item2} is max from {String.Join(",", numbers)}");    Read();   }  } }

根據上面的代碼片段,名為 FindMinMax 的方法調用并返回一個元組。 當方法直接返回多個值到一個 Tuple 類型,它們會按照他們的順序給它們一些默認名稱,以便可以方便地調用它們。這元組有兩個項目,因此這些項目調用 Item1 和 Item2。 Item1 表示第一個值,而 Item2 表示第二個值。這跟 Tupple 項在創建時使用的順序相同。

現在,運行應用程序。 最終結果如下圖所示。

c,7,tuple,7.0,tuple使用

圖4 輸出結果

由于 Item1 和 Item2 不表示字段的實際名稱,因此我們可以給它們自定義名稱。 元組類型變量可以具有自定義名稱,而不是僅僅是默認的 Item1 或 Item2。

讓我們更新 Operation 類中名為 FindMinMax 的現有方法。 我們為這些元組字段分配自定義名稱。 以下代碼段用來實現該功能。

using System.Collections.Generic;  namespace TupleApp {  class Operation  {   internal (int Minimum, int Maximum) FindMinMax(List<int> list)   {    int maximum = int.MinValue, minimum = int.MaxValue;    list.ForEach(n =>    {     minimum = n < minimum ? n : minimum;     maximum = n > maximum ? n : maximum;    });    return (minimum, maximum);   }  } }

這里,元組的第一個字段名稱為 Minimum,而另一個字段名為 Maximum。

現在,根據下面的代碼片段從可執行程序調用此方法。

using System; using System.Collections.Generic; using System.Linq; using static System.Console;  namespace TupleApp {  class Program  {   static void Main(string[] args)   {    List<int> numbers = Enumerable.Range(1, 100).OrderBy(x => Guid.NewGuid()).Take(10).ToList();    Operation operation = new Operation();    var data = operation.FindMinMax(numbers);    Write($"{data.Minimum} is min and {data.Maximum} is max from {String.Join(",", numbers)}");    Read();   }  } }

名為 FindMinMax 的方法調用并返回一個元組。 該元組有兩個項目,根據元組項目的順序稱為最小值和最大值。

現在,運行應用程序并查看結果。

c,7,tuple,7.0,tuple使用

圖5 輸出結果

結論

Tuple 是異類對象的有序序列。 當一個方法需要返回多個值的時候使用它。Tuple 實例的條目數是固定的。Tuple 有最大數目為 8 項的限制。 如果我們想創建一個帶有更多項的 Tuple,我們必須創建嵌套的 Tuple。 Tuple 的第八項必須是另一個 Tuple。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩成人黄色| 国产精品高潮呻吟视频| 日韩精品视频免费在线观看| 国产精品一区二区在线| 一本一道久久a久久精品逆3p| 亚洲国产精品成人va在线观看| 久久大大胆人体| 成人在线精品视频| 国产精品在线看| 亚洲精品国产精品国自产在线| 亚洲视屏在线播放| 亚洲自拍欧美色图| 中文字幕国产亚洲2019| 91精品国产色综合久久不卡98口| 日韩电影大全免费观看2023年上| zzjj国产精品一区二区| 亚洲欧美成人一区二区在线电影| 久久久久女教师免费一区| 久热精品视频在线免费观看| 大桥未久av一区二区三区| 亚洲一区二区三区sesese| 亚洲最大的av网站| 日韩av综合网| 日韩成人黄色av| 国产精品专区第二| 国产999精品久久久影片官网| 色婷婷av一区二区三区久久| 国产亚洲综合久久| 国产美女高潮久久白浆| 狠狠躁夜夜躁人人躁婷婷91| 热久久99这里有精品| 91精品国产九九九久久久亚洲| 欧美黑人一区二区三区| 日韩免费在线播放| 国产ts一区二区| 欧美激情欧美激情| 成人午夜激情网| 欧美日本啪啪无遮挡网站| 成人中心免费视频| 亚洲精品一区二区在线| 欧美日韩另类视频| 国产主播精品在线| 欧美乱大交xxxxx另类电影| 国产成人精品久久亚洲高清不卡| 在线观看日韩欧美| 久久免费观看视频| 日韩在线免费av| 亚洲成人黄色在线观看| 午夜精品一区二区三区在线播放| 91精品久久久久久久久久另类| 欧洲一区二区视频| 91在线网站视频| www国产亚洲精品久久网站| 97视频在线观看亚洲| 国产视频精品自拍| 久久在线免费观看视频| 欧美日韩福利在线观看| 亚洲亚裔videos黑人hd| 亚洲国产91精品在线观看| 欧美老肥婆性猛交视频| 一区二区亚洲精品国产| 国产成人91久久精品| 91青草视频久久| 亚洲电影免费观看高清完整版在线观看| 97精品在线视频| 久久精品久久久久电影| 国产午夜精品视频免费不卡69堂| 色樱桃影院亚洲精品影院| 亚洲精品久久久久中文字幕二区| 日韩欧美国产免费播放| 这里只有精品视频在线| 青青青国产精品一区二区| 国产精品91在线观看| 欧美性生活大片免费观看网址| 在线看福利67194| 欧美中文字幕在线播放| 热门国产精品亚洲第一区在线| 日本高清不卡在线| 俺去亚洲欧洲欧美日韩| 成人国内精品久久久久一区| 最新中文字幕亚洲| 国产精品一区久久| 亚洲精品美女久久久久| 成人有码在线播放| 萌白酱国产一区二区| 国产精品视频免费观看www| 色琪琪综合男人的天堂aⅴ视频| 国产精品九九九| 欧美中文字幕在线视频| 538国产精品一区二区免费视频| 美女福利视频一区| 亚洲18私人小影院| 亚洲美女又黄又爽在线观看| 97香蕉超级碰碰久久免费的优势| 欧美午夜精品在线| 久久国产精品久久久久久久久久| 亚洲午夜久久久久久久| 日韩av电影在线免费播放| 亚洲第一天堂无码专区| 97视频在线看| 国产成人精品在线| 久热爱精品视频线路一| 亚洲免费av片| 欧美激情精品久久久久久| 日本a级片电影一区二区| 亚洲成人黄色网址| 精品国产欧美成人夜夜嗨| 国产日韩在线一区| 久久综合伊人77777尤物| 日韩av免费在线看| 日韩美女视频中文字幕| 一区二区欧美激情| 国产欧美在线观看| 亚洲女人天堂色在线7777| 91国产精品视频在线| 成人乱人伦精品视频在线观看| 米奇精品一区二区三区在线观看| 欧美精品久久久久| 成人黄色大片在线免费观看| 国产精品视频在线播放| 欧美黄色性视频| 九九久久国产精品| 久久精品国产91精品亚洲| 国产91在线播放| 成人午夜在线视频一区| 亚洲国产小视频在线观看| 欧美精品www| 国产精品久久久久久亚洲调教| 欧美最猛性xxxxx免费| 欧美资源在线观看| 国产综合色香蕉精品| 久久久久久久久久久人体| 欧美电影免费观看高清完整| 欧美一区二区三区免费视| 亚洲**2019国产| 日本欧美一级片| 中文欧美在线视频| 亚洲一区二区久久久久久久| 欧美高清视频免费观看| 欧美性猛交xxxx富婆| 亚洲国产高清福利视频| 亚洲欧美制服中文字幕| 久久伊人精品天天| 欧美日韩免费在线观看| 精品福利免费观看| 亚洲一区二区精品| 国产精品亚洲第一区| 久久久久日韩精品久久久男男| 宅男66日本亚洲欧美视频| 中文字幕久热精品视频在线| 日韩在线视频一区| 国产精品偷伦免费视频观看的| 在线看日韩欧美| 69精品小视频| 亚洲黄页视频免费观看| 亚洲最大的免费| 日韩电影中文字幕| 日本电影亚洲天堂| 日韩av电影免费观看高清| 国产精品久久久久久久久久久不卡| 精品久久国产精品| 欧美激情精品久久久久久久变态| 成人免费淫片aa视频免费| 精品国产精品三级精品av网址|