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

2019-12-30 16:58:23丽君

根据上面的代码片段,该方法返回一个有两个项目的元组。 这些项目保存数字系列的最大值和最小值。

现在,根据下面的代码片段在可执行程序调用这个方法。


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