最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年03月30日 09:45:24   作者:Tony  
這篇文章主要介紹了C#7中Tuple特性的相關資料,文中通過示例代碼介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友可以們下面來一起學習學習吧。

介紹

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

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

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

使用 out 參數(shù)

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

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

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; 
 } 
 } 
}

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

現(xiàn)在,根據(jù)下面的代碼片段從可執(zhí)行程序調用此方法。

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(); 
 } 
 } 
}

現(xiàn)在,運行應用程序。 結果如下圖所示。

圖1:輸出

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

使用 Class/Struct

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

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

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

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; 
 } 
 } 
}

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

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(); 
 } 
 } 
}

現(xiàn)在,運行應用程序。 最終結果如下圖所示。

圖2: 輸出結果

使用 Tuple

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

圖3 NuGet 包

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

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); 
  } 
 } 
}

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

現(xiàn)在,根據(jù)下面的代碼片段在可執(zhí)行程序調用這個方法。

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(); 
  } 
 } 
}

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

現(xiàn)在,運行應用程序。 最終結果如下圖所示。

圖4 輸出結果

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

讓我們更新 Operation 類中名為 FindMinMax 的現(xiàn)有方法。 我們?yōu)檫@些元組字段分配自定義名稱。 以下代碼段用來實現(xiàn)該功能。

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。

現(xiàn)在,根據(jù)下面的代碼片段從可執(zhí)行程序調用此方法。

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 的方法調用并返回一個元組。 該元組有兩個項目,根據(jù)元組項目的順序稱為最小值和最大值。

現(xiàn)在,運行應用程序并查看結果。

圖5 輸出結果

結論

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

總結

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

相關文章

  • 共享鎖using范圍的實現(xiàn)方法

    共享鎖using范圍的實現(xiàn)方法

    共享鎖using范圍的實現(xiàn)方法,需要的朋友可以參考一下
    2013-04-04
  • C# OCR實現(xiàn)文字識別功能

    C# OCR實現(xiàn)文字識別功能

    OCR,中文叫做光學字符識別。它是利用光學技術和計算機技術把印在或寫在紙上的文字讀取出來,并轉換成一種計算機能夠接受、人又可以理解的格式。本文將利用OCR實現(xiàn)文字識別功能,感興趣的可以了解一下
    2022-11-11
  • C#使用三層架構開發(fā)Winform的詳細案例

    C#使用三層架構開發(fā)Winform的詳細案例

    這篇文章介紹了C#使用三層架構開發(fā)Winform的詳細案例,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#中字符串合并的多種實現(xiàn)方法

    C#中字符串合并的多種實現(xiàn)方法

    字符串合并是將兩個或多個字符串組合成一個單一字符串的過程,在項目開發(fā)中非常常見,C#也為我們提供非常多字符串合并方式,下面一起盤點下,感興趣的小伙伴跟著小編一起來看看吧
    2025-01-01
  • unity 鼠標移入彈出UI的操作

    unity 鼠標移入彈出UI的操作

    這篇文章主要介紹了unity 鼠標移入彈出UI的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C# Socket通信的實現(xiàn)(同時監(jiān)聽多客戶端)

    C# Socket通信的實現(xiàn)(同時監(jiān)聽多客戶端)

    這篇文章主要介紹了C# Socket通信的實現(xiàn)(同時監(jiān)聽多客戶端),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#使用handle實現(xiàn)獲取占用指定文件或文件夾的進程

    C#使用handle實現(xiàn)獲取占用指定文件或文件夾的進程

    很多時候,一些不知道啥進程,把你的文件給占用了,然后就沒辦法刪掉或者做其他操作,如果使用Locksmith功能,就可以實現(xiàn)快速鎖定是哪個進程在搞事情,把對應進程干掉就可以了,下面內容演示C#使用幾行代碼實現(xiàn)File?Locksmith功能,需要的朋友可以參考下
    2024-09-09
  • Winform開發(fā)框架中如何使用DevExpress的內置圖標資源

    Winform開發(fā)框架中如何使用DevExpress的內置圖標資源

    這篇文章主要給大家介紹了關于在Winform開發(fā)框架中如何使用DevExpress的內置圖標資源的相關資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們一起來看看吧
    2018-12-12
  • WinForm實現(xiàn)鼠標拖動控件跟隨效果

    WinForm實現(xiàn)鼠標拖動控件跟隨效果

    這篇文章主要為大家詳細介紹了WinForm實現(xiàn)鼠標拖動控件跟隨效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C#通過Builder模式造車

    C#通過Builder模式造車

    這篇文章介紹了C#通過Builder模式造車的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10

最新評論

富平县| 北川| 伊宁市| 屯昌县| 彭山县| 开江县| 隆林| 临泽县| 通许县| 博客| 郴州市| 西安市| 靖安县| 汽车| 时尚| 桃江县| 呼图壁县| 濮阳市| 关岭| 郓城县| 宝丰县| 石门县| 武冈市| 汝州市| 章丘市| 新竹县| 景泰县| 延庆县| 大石桥市| 昆山市| 阿克苏市| 鄂州市| 延寿县| 如皋市| 广元市| 蒲城县| 郯城县| 奉新县| 青铜峡市| 蓬安县| 平南县|