C# 元组
Tuple类的使用
元组就是将一组松散的对象简单地组合在一起。
元组比数组灵活性略强,数组中元素类型是统一的,而元组使用的是泛型参数,每个元素类型相互独立。
元组不同于类和结构,类和结构是高度聚合的数据类型,其中要实现各种复杂的功能;元组还是一系列单一对象的简单组合,不存在复杂操作。
元组中将所有元素分配给Item*
属性,其中*
表示序号,例如Item1、Item2等,取决于元素个数,可容纳1~8个。
创建元组实例:
(1)Tuple<int,long,char> t = new Tuple<int,long,char>(1000,20000L,'p');
(2)var k = Tuple.Create<byte,string>(255,"full");
// Item1:255,Item2:"full"
ValueTuple
ValueTuple是值类型,不需要分配堆内存,效率更优于Tuple,推荐使用。
ValueTuple<bool, byte> t2 = ValueTuple.Create<bool, byte>(false, 100); StringBuilder strbd = new StringBuilder(); strbd.AppendFormat("{0}:{1} = {2}\n", nameof(t2.Item1), t2.Item1.GetType().Name, t2.Item1); strbd.AppendFormat("{0}:{1} = {2}\n", nameof(t2.Item2), t2.Item2.GetType().Name, t2.Item2); // 修改 Item2 t2.Item2 = 210; // 再次输出 strbd.AppendFormat("修改后,{0} = {1}", nameof(t2.Item2), t2.Item2); Console.WriteLine(strbd);
结果:
Item1:Boolean = False Item2:Byte = 100 修改后,Item2 = 210
ValueTuple结构得到C#语法支持,可用更简洁的语法声明。
(1)var a = (100,(byte)15,true);
(2)ValueTuple<string,string> b = ("aaa","bbb");
(3)(long,uint)f = (1234534343L,7888);
重命名元组字段
(1)(int ID,string Title,string Body) v =(1,"aa","bb");
可直接使用自定义字段名v.ID = 1
(2)var w = (Count:999,Symb:'*')
将元组解构为变量
如果声明元组时,不使用变量名,则编译器会将元组中的各个字段自动解构为单独的变量。
(long BookID, string BookName, string Author) = (10000031L, "Sample Book", "Tommy"); Console.WriteLine($"编号:{BookID}\n书名:{BookName}\n作者:{Author}");
将元组作为返回值
static (string, int, string) GetData() { return ("Test 1", 35, "Test 2"); } static (int Number1, int Number2) GetNumbers() { Random rand = new Random(); return (rand.Next(0, 1000), rand.Next(0, 1000)); }
// 不对字段进行重命名 var k = GetData(); Console.WriteLine("未对字段重命名:"); Console.WriteLine("Item1 = {0}, Item2 = {1}, Item3 = {2}", k.Item1, k.Item2, k.Item3); // 重命名元组中的字段 var (Mark1, Count, Mark2) = GetData(); Console.WriteLine("\n对字段进行重命名:"); Console.WriteLine($"{nameof(Mark1)} = {Mark1}, {nameof(Count)} = {Count}, {nameof(Mark2)} = {Mark2}"); // 获取带命名字段的返回值 var d = GetNumbers(); Console.WriteLine("\n返回带重命名字段的元组:"); Console.WriteLine($"{nameof(d.Number1)} = {d.Number1}, {nameof(d.Number2)} = {d.Number2}"); Console.Read();
本文来自博客园,作者:一纸年华,转载请注明原文链接:https://www.cnblogs.com/nullcodeworld/p/15234935.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)