C#元组类型ValueTuple用法详解
简介
元组类型是C#7.0之后加入的新特性,提供了一种简单方便的方式来存储和传递多个值。元组类型有两种:ValueTuple和Tuple。
本篇攻略将详细讲解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技术站