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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决android.support.v4.content.FileProvide找不到的问题
- 为Android系统添加config.xml 新配置的设置
- 浅析Android录屏 MediaRecorder
- 实用的网站开发工具导航源码,可以提高工作效率
- Github服务端和客户端完成本地代码上传至Github教程
- 一软在手截图无忧:ShareX截图神器-短小精悍功能完备 自动化任务可截动图截视频
- 使用SurfaceView实现视频弹幕
- 01 CentOS 7.6 切换系统语言
- Android双重SurfaceView实现弹幕效果
- SurfaceView播放视频发送弹幕并实现滚动歌词
- RecyclerView实现流式标签单选多选功能
- Android中AlertDialog四种对话框的最科学编写用法(实例代码)
- Android判断手机是否联网及自动跳转功能(收藏版)
- 使用Flutter实现一个走马灯布局的示例代码
- Android按钮美化样式的实现代码