《CLR Via C# 第3版》笔记之(十一) - 匿名类型和元组
匿名类型使得C#更具动态性。而元组则是以前看python时就了解的一个类型,与List类型类似,只是它里面的元素是不可变的。
主要内容:
- 匿名类型介绍
- 元组的介绍
1. 匿名类型介绍
匿名类型其实也像元组一样,定义了以后就不能更改里面元素的名称和个数。
使用匿名类型的代码非常简单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | using System; namespace cnblog_bowen { public sealed class CLRviaCSharp_11 { static void Main( string [] args) { var v = new { Name= "my name" , Age=100 }; Console.WriteLine( "Name={0}, Age={1}" , v.Name, v.Age); Console.ReadKey( true ); } } } |
在第一次定义的时候指定元素的名称,元素的类型是由系统自动推断的。定义完后就可以可以当成一个实例来使用了。
现在visual studio也可以“智能感知”匿名类型的属性名了。
匿名类型的一些规则:
1)如果两个匿名类型的结构完全一样,那么它们之间可以进行赋值操作
2)匿名类型是引用类型,编译器会生成相应的class,而不是struct
3)匿名类型也是Object类派生的,但是无法将Object类型转型回匿名类型。
4)匿名类型不能作为一个方法的参数和返回值。
上述3)和4)的原因在于,匿名类型的名称是有编译器按一定规则生成的,在写代码的时候并不知道我们定义的匿名类型的具体名称。
因此,无法从Object转型回匿名类型,也不能指定方法的参数类型和返回值类型。
2. 元组的介绍
C#中的泛型元组类型重载了多个版本,用于创建各种参数类型和个数的元组。
创建元组的方法如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | namespace System { // Summary: // Provides static methods for creating tuple objects. public static class Tuple { public static Tuple<T1> Create<T1>(T1 item1); public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2); public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3); public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4); public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5); public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6); public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7); public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8); } |
元组创建后就是只读的了,不能在对其中的元素进行修改。
元组的一些规则:
1)元组中的字段都是以Item#的方式命名的(即Item1,Item2……)
2)写Tuple和用Tuple的人必须对Item#属性放回的内容有个清楚的了解
3)Tuple类型可以作为方法的参数和返回值
标签:
CLR via C#笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人