【C#】元组Tuple

https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/value-tuples

image

1.Tuple

Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>

Tuple是一个引用类型,而不是一个值类型,它在堆上分配。
元素是只读的。
image
image
ValueTuple是C# 7.0的新特性之一,.Net Framework 4.7以上版本可用。

不含字段名称

Tuple<int, string, string> person = new Tuple <int, string, string>(1, "Steve", "Jobs");
var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8);		

一个元组最多只能包含八个元素。当您尝试包含八个以上的元素时,它将产生编译器错误。

(int, string, string) person = (1, "Steve", "Jobs")
string name1 = person.item2;

含字段名称

(int age, string name, string job) person = (1, "Steve", "Jobs");
var person = (age:1, name:"Steve", job:"Jobs");
string name1 = person.name;

使用

  • 想从一个方法中返回多个值而不使用ref 或 out参数时
static void Main(string[] args)
{    var person = GetPerson();
}
static Tuple<int, string, string> GetPerson() 
{    return Tuple.Create(1, "Bill", "Gates");
}
  • 想通过单个参数将多个值传递给方法时
static void Main(string[] args)
{    var person = Tuple.Create(1, "Steve", "Jobs");
    DisplayTuple(person);
}

static void DisplayTuple(Tuple<int,string,string> person)
{
    Console.WriteLine($"Id = { person.Item1}");
    Console.WriteLine($"First Name = { person.Item2}");
    Console.WriteLine($"Last Name = { person.Item3}");
}

  • 想暂时保存数据库记录或某些值而不创建单独的类时

嵌套

如果要在一个元组中包含八个以上的元素,则可以通过嵌套另一个元组对象作为第八个元素来实现。可以使用Rest属性访问最后一个嵌套元组。要访问嵌套元组的元素,请使用Rest.Item1.Item属性。

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10, 11, 12, 13));
numbers.Item1; // 返回 1
numbers.Item7; // 返回 7
numbers.Rest.Item1; //返回(8,9,10,11,12,13)
numbers.Rest.Item1.Item1; //返回 8
numbers.Rest.Item1.Item2; //返回 9
var numbers = Tuple.Create(1, 2, Tuple.Create(3, 4, 5, 6, 7,  8), 9, 10, 11, 12, 13 );
numbers.Item1; // 返回 1
numbers.Item2; // 返回 2
numbers.Item3; // 返回 (3, 4, 5, 6, 7,  8)
numbers.Item3.Item1; // 返回 3
numbers.Item4; // 返回 9
numbers.Rest.Item1; //返回13

2.ValueTuple

值元组是结构,是值类型,不是类,而元组(Tuple)是类,引用类型;
值元组元素是可变的,不是只读的,也就是说可以改变值元组中的元素值;

posted @ 2023-06-08 11:15  neon233  阅读(95)  评论(0编辑  收藏  举报