介绍

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();
}
}
}
现在,运行应用程序。 结果如下图所示。
图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();
}
}
}
现在,运行应用程序。 最终结果如下图所示。
图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);
}
}
}
根据上面的代码片段,该方法返回一个有两个项目的元组。 这些项目保存数字系列的最大值和最小值。
现在,根据下面的代码片段在可执行程序调用这个方法。
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 项在创建时使用的顺序相同。
现在,运行应用程序。 最终结果如下图所示。
图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 的方法调用并返回一个元组。 该元组有两个项目,根据元组项目的顺序称为最小值和最大值。
现在,运行应用程序并查看结果。
图5 输出结果
结论
Tuple 是异类对象的有序序列。 当一个方法需要返回多个值的时候使用它。Tuple 实例的条目数是固定的。Tuple 有最大数目为 8 项的限制。 如果我们想创建一个带有更多项的 Tuple,我们必须创建嵌套的 Tuple。 Tuple 的第八项必须是另一个 Tuple。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# c
# 7
# tuple
# 7.0
# tuple使用
# C# 7.0 新特性1之基于Tuple的“多”返回值方法
# 多个
# 最小值
# 创建一个
# 让我们
# 应用程序
# 所示
# 可执行
# 自定义
# 的是
# 这一
# 如下图
# 第一个
# 在这
# 数据结构
# 它可以
# 有两个
# 里也
# 不同类型
# 返回值
# 这是
相关文章:
如何高效利用200m空间完成建站?
学校建站服务器如何选型才能满足性能需求?
如何在阿里云域名上完成建站全流程?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何生成腾讯云建站专用兑换码?
如何在阿里云服务器自主搭建网站?
建站之星官网登录失败?如何快速解决?
专业公司网站制作公司,用什么语言做企业网站比较好?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何通过VPS建站实现广告与增值服务盈利?
如何选择域名并搭建高效网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
建站之星各版本价格是多少?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
安云自助建站系统如何快速提升SEO排名?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
招贴海报怎么做,什么是海报招贴?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
C++时间戳转换成日期时间的步骤和示例代码
建站VPS选购需注意哪些关键参数?
购物网站制作公司有哪些,哪个购物网站比较好?
,sp开头的版面叫什么?
贸易公司网站制作流程,出口贸易网站设计怎么做?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
网站制作说明怎么写,简述网页设计的流程并说明原因?
如何通过远程VPS快速搭建个人网站?
建站主机解析:虚拟主机配置与服务器选择指南
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何制作一个表白网站视频,关于勇敢表白的小标题?
网站制作报价单模板图片,小松挖机官方网站报价?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
建站之星收费标准详解:套餐费用及年费价格表一览
建站之星伪静态规则如何正确配置?
宝塔建站无法访问?如何排查配置与端口问题?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
建站主机类型有哪些?如何正确选型
制作旅游网站html,怎样注册旅游网站?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
,怎么用自己头像做动态表情包?
如何在七牛云存储上搭建网站并设置自定义域名?
建设网站制作价格,怎样建立自己的公司网站?
装修招标网站设计制作流程,装修招标流程?
设计网站制作公司有哪些,制作网页教程?
小建面朝正北,A点实际方位是否存在偏差?
网站企业制作流程,用什么语言做企业网站比较好?
*请认真填写需求信息,我们会在24小时内与您取得联系。