C#元组类型ValueTuple用法详解

yizhihongxing

C#元组类型ValueTuple用法详解

简介

元组类型是C#7.0之后加入的新特性,提供了一种简单方便的方式来存储和传递多个值。元组类型有两种:ValueTupleTuple

本篇攻略将详细讲解ValueTuple类型的用法。

ValueTuple类型的定义

ValueTuple是一个泛型结构体(struct),它所定义的元组类型可以存储1~8个元素,如下:

ValueTuple<int> tuple1 = ValueTuple.Create(1);
ValueTuple<int, string> tuple2 = ValueTuple.Create(1, "hello");
ValueTuple<int, string, bool> tuple3 = ValueTuple.Create(1, "hello", true);
ValueTuple<int, string, bool, char> tuple4 = ValueTuple.Create(1, "hello", true, 'a');
ValueTuple<int, string, bool, char, double> tuple5 = ValueTuple.Create(1, "hello", true, 'a', 3.14);
ValueTuple<int, string, bool, char, double, float> tuple6 = ValueTuple.Create(1, "hello", true, 'a', 3.14, 6.28f);
ValueTuple<int, string, bool, char, double, float, decimal> tuple7 = ValueTuple.Create(1, "hello", true, 'a', 3.14, 6.28f, 1.618m);
ValueTuple<int, string, bool, char, double, float, decimal, long> tuple8 = ValueTuple.Create(1, "hello", true, 'a', 3.14, 6.28f, 1.618m, 9223372036854775807);

ValueTuple类型的赋值和访问

赋值方式

元组类型的赋值方式与数组类似,可以通过下标或名称来赋值:

ValueTuple<int, string, bool> tuple = ValueTuple.Create(1, "hello", true);
tuple.Item1 = 2;
tuple.Item2 = "world";
tuple.Item3 = false;

也可以通过解构赋值方式来给元素赋值:

(int t1, string t2, bool t3) = tuple;
t1 = 2;
t2 = "world";
t3 = false;

访问方式

可以通过Item1、Item2等属性或者解构方式来访问元组元素:

int t1 = tuple.Item1;
string t2 = tuple.Item2;
bool t3 = tuple.Item3;

(int t4, string t5, bool t6) = tuple;

ValueTuple类型作为函数返回值

ValueTuple类型还可以作为函数的返回值,不仅可以返回单个值,也可以返回多个值:

static (int, string, bool) GetValues()
{
    int t1 = 1;
    string t2 = "hello";
    bool t3 = true;

    return (t1, t2, t3);
}

static (int, string) GetValues2()
{
    int t1 = 1;
    string t2 = "hello";

    return (t1, t2);
}

ValueTuple类型作为函数参数

ValueTuple类型也可以作为函数的参数传递:

static void SetValues((int, string, bool) tuple)
{
    Console.WriteLine($"Item1: {tuple.Item1}, Item2: {tuple.Item2}, Item3: {tuple.Item3}");
}

调用方式如下:

var tuple = (1, "hello", true);
SetValues(tuple);

示例说明

示例1:使用ValueTuple类型返回坐标

编写一个函数,该函数接收一个点的x和y坐标值,返回一个ValueTuple类型的元组,其中第1个元素为x坐标,第2个元素为y坐标。

static (int, int) GetPoint(int x, int y)
{
    return (x, y);
}

函数调用:

var point = GetPoint(1, 2);
Console.WriteLine($"x: {point.Item1}, y: {point.Item2}");

输出结果:

x: 1, y: 2

示例2:使用ValueTuple类型返回课程成绩统计信息

编写一个函数,该函数接收一个数组,数组中的每个元素为一个元组,包含学生姓名、语文分数、数学分数、英语分数。函数返回一个ValueTuple类型的元组,其中第1个元素为所有学生的平均分,第2个元素为语文分数最高的学生姓名,第3个元素为数学分数最高的学生姓名,第4个元素为英语分数最高的学生姓名。

static (double, string, string, string) GetScores((string Name, int Chinese, int Math, int English)[] scores)
{
    double avg = (double)scores.Sum(s => s.Chinese + s.Math + s.English) / scores.Length;

    var chineseMax = scores.Max(s => s.Chinese);
    var mathMax = scores.Max(s => s.Math);
    var englishMax = scores.Max(s => s.English);

    var chineseName = scores.First(s => s.Chinese == chineseMax).Name;
    var mathName = scores.First(s => s.Math == mathMax).Name;
    var englishName = scores.First(s => s.English == englishMax).Name;

    return (avg, chineseName, mathName, englishName);
}

函数调用:

var scores = new[]
{
    ("张三", 80, 90, 85),
    ("李四", 90, 75, 95),
    ("王五", 85, 80, 90),
    ("赵六", 85, 85, 80)
};
var result = GetScores(scores);

Console.WriteLine($"平均分:{result.Item1}");
Console.WriteLine($"语文最高分学生:{result.Item2}");
Console.WriteLine($"数学最高分学生:{result.Item3}");
Console.WriteLine($"英语最高分学生:{result.Item4}");

输出结果:

平均分:83.75
语文最高分学生:李四
数学最高分学生:张三
英语最高分学生:李四

结语

本篇攻略详细讲解了ValueTuple类型的定义、赋值和访问、作为函数返回值和参数,同时也提供了两个示例说明。ValueTuple类型非常方便,可以使代码更加简洁易懂。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#元组类型ValueTuple用法详解 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • WinForm实现读取Resource中文件的方法

    WinForm实现读取Resource中文件的方法 1. 添加要读取的文件到资源文件中 首先,在Visual Studio的解决方案资源管理器中,右键单击资源文件(例如“Resources.resx”),选择“添加现有项”并选择要添加的文件(例如“test.txt”)。 2. 读取资源文件中的内容 可以使用.NET Framework内置的ResourceM…

    C# 2023年6月1日
    00
  • Android开源项目PullToRefresh下拉刷新功能详解

    Android开源项目PullToRefresh下拉刷新功能详解 PullToRefresh简介 PullToRefresh是一款在Android平台上使用的可拓展、易定制下拉刷新控件,现在已经迁移至AndroidX。PullToRefresh支持下拉刷新和上拉加载更多功能,非常适用于数据列表的情况。 导入PullToRefresh库 PullToRefre…

    C# 2023年6月6日
    00
  • C#获取指定年份第一个星期一具体日期的方法

    下面我将详细讲解C#获取指定年份第一个星期一具体日期的方法的完整攻略。 首先,我们需要使用C#中的DateTime类来实现。DateTime类在创建日期和时间方面非常方便,可以用于执行各种日期和时间的操作。 首先,我们需要创建一个DateTime实例,表示我们要获取的年份。 int year = 2021; DateTime firstDayOfYear =…

    C# 2023年6月1日
    00
  • ASP.NET Core项目中调用WebService的方法

    在 ASP.NET Core 项目中调用 WebService 的方法,可以使用 .NET Core 自带的 System.ServiceModel 命名空间提供的 WCF 客户端。以下是详细的攻略: 步骤一:添加服务引用 在 ASP.NET Core 项目中调用 WebService,需要先添加服务引用。可以使用 Visual Studio 的“添加服务引…

    C# 2023年5月17日
    00
  • 通过实例解析c# yield关键字使用方法

    通过实例解析 C# yield 关键字使用方法 什么是 yield? 在 C# 中,yield 是一个关键字,用于支持生成枚举器的语法。它在迭代器中使用,可以让我们更容易地实现迭代器的功能。 yield关键字提供了一个简单的方式来创建许多常见的枚举器,并且不需要手动实现全部的迭代器的代码。使用 yield 关键字可以大大简化这个过程,因此是 C# 中一个非常…

    C# 2023年6月7日
    00
  • 利用C#实现合并Word文档功能

    实现合并Word文档功能主要涉及到以下几个步骤: 1. 安装OpenXML SDK OpenXML SDK是用于处理Office文件的开源API,我们可以使用它来处理Word文档。 安装方法: 在Visual Studio中打开NuGet包管理器(Tools -> NuGet Package Manager -> Manage NuGet Pac…

    C# 2023年6月1日
    00
  • C# DateTime.Parse()方法: 将字符串转换为日期时间

    DateTime.Parse()方法的作用: C#中的DateTime.Parse()方法用于将字符串转换为DateTime对象,也就是将字符串表示的日期和时间转换为DateTime类型的值。 DateTime.Parse()的使用方法: DateTime.Parse(string s):该方法将接收一个参数s,表示要转换为DateTime类型的字符串。 下…

    C# 2023年4月19日
    00
  • C#设置软件开机自动运行的方法(修改注册表)

    下面是关于“C#设置软件开机自动运行的方法(修改注册表)”的完整攻略: 1. 前言 如果我们需要在电脑启动时自动运行我们编写的 C# 软件,可以使用修改注册表的方法实现。这种方法操作简单,但需要一定的系统基础知识,需要小心操作,以免造成系统损坏。本文将详细讲解如何使用 C# 代码来实现开机自动运行。 2. 实现方法 使用 C# 代码实现开机自动运行需要修改系…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部