使用 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();
}
}
}
现在,运行应用程序。 最终结果如下图所示。

图2: 输出结果
使用 Tuple
C#7 引入了定义元组的新方法。 Tuple 是从方法返回多个值的另一个选择。 它可以保存多个不同类型的值。 要在应用程序中使用 Tuple,我们需要安装 System.ValueTuple NuGet 包.

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










