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

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

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