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

1.Tuple
| Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> |
Tuple是一个引用类型,而不是一个值类型,它在堆上分配。
元素是只读的。


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; |
| numbers.Item7; |
| numbers.Rest.Item1; |
| numbers.Rest.Item1.Item1; |
| numbers.Rest.Item1.Item2; |
| var numbers = Tuple.Create(1, 2, Tuple.Create(3, 4, 5, 6, 7, 8), 9, 10, 11, 12, 13 ); |
| numbers.Item1; |
| numbers.Item2; |
| numbers.Item3; |
| numbers.Item3.Item1; |
| numbers.Item4; |
| numbers.Rest.Item1; |
2.ValueTuple
值元组是结构,是值类型,不是类,而元组(Tuple)是类,引用类型;
值元组元素是可变的,不是只读的,也就是说可以改变值元组中的元素值;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南