📜  c# tuple - C# (1)

📅  最后修改于: 2023-12-03 14:59:40.984000             🧑  作者: Mango

C# Tuple

C# Tuple 是一种类型,用于维护一组元素的集合。每个元素可以是不同的类型。Tuple 元素是按顺序排列的且不可变的。

使用 Tuple

要创建一个新的 Tuple,请使用 Tuple.Create() 方法。

var person = Tuple.Create("Bill", "Gates", 60);

可以使用索引访问 Tuple 中的元素。

Console.WriteLine(person.Item1); // Bill
Console.WriteLine(person.Item2); // Gates
Console.WriteLine(person.Item3); // 60

您还可以使用 ItemX 属性(其中 X是元素索引) 来访问 Tuple中元素的值。

Console.WriteLine(person.Item1); // Bill
Console.WriteLine(person.Item2); // Gates
Console.WriteLine(person.Item3); // 60

在C#7及更高版本中,您可以使用解构语法将 Tuple 元素分配给变量。

(string firstName, string lastName, int age) = person;
Console.WriteLine(firstName); // Bill
Console.WriteLine(lastName); // Gates
Console.WriteLine(age); // 60
创建具有命名元素的 Tuple

在C#7及更高版本中,您可以使用新的 Tuple 创建方法来创建具有命名元素的 Tuple。

var person = (firstName: "Bill", lastName: "Gates", age: 60);

可以使用相应的命名属性来访问元素的值。

Console.WriteLine(person.firstName); // Bill
Console.WriteLine(person.lastName); // Gates
Console.WriteLine(person.age); // 60

您还可以使用解构语法来将 Tuple 元素分配给带有名称的变量。

(string firstName, string lastName, int age) = person;
Console.WriteLine(firstName); // Bill
Console.WriteLine(lastName); // Gates
Console.WriteLine(age); // 60
创建嵌套 Tuple

Tuple 可以包含其他 Tuple 和其他元素类型的组合。

var person = Tuple.Create("Bill", "Gates", Tuple.Create("Seattle", "WA"));

可以使用相应的索引或属性来访问嵌套 Tuple 中的值。

Console.WriteLine(person.Item1); // Bill
Console.WriteLine(person.Item2); // Gates
Console.WriteLine(person.Item3.Item1); // Seattle
Console.WriteLine(person.Item3.Item2); // WA

或者,您可以使用嵌套解构来访问值。

(string firstName, string lastName, (string city, string state) address) = person;
Console.WriteLine(firstName); // Bill
Console.WriteLine(lastName); // Gates
Console.WriteLine(address.city); // Seattle
Console.WriteLine(address.state); // WA
Tuple 和 LINQ

Tuple 可以帮助我们在使用 LINQ 时,创建和维护以前只能使用自定义类型来实现的数据结构。

例如,以下代码使用 Tuple 来访问列表中的不同数据类型。

var data = new List<Tuple<string, int, bool>>();
data.Add(Tuple.Create("Bill", 60, true));
data.Add(Tuple.Create("Steve", 56, false));
data.Add(Tuple.Create("Mark", 52, true));

var names = from d in data select d.Item1;
var ages = from d in data select d.Item2;
var isActive = from d in data select d.Item3;

foreach (var name in names)
{
    Console.WriteLine(name);
}

foreach (var age in ages)
{
    Console.WriteLine(age);
}

foreach (var active in isActive)
{
    Console.WriteLine(active);
}

总结

Tuple 是用于维护一组元素的集合。Tuple 元素是按顺序排列的且不可变的。C#7及更高版本中,您可以创建带有命名元素的 Tuple,并使用解构语法来访问 Tuple 中的值。Tuple 还可以嵌套,并且可以与 LINQ 一起使用来创建和维护以前只能使用自定义类型来实现的数据结构。