匿名类型是不是强类型?
在一次会议上由于一些需要提到了匿名类型,也由此展开了两批人,我和另一位主张匿名类型不是强类型,而另两位则觉得匿名类型属于强类型,此博文主要深入了解一下匿名类型。
什么是匿名类型?
原来不想写这个标题相关内容的,因为类似文章还是很多的,但为了一些新人能更好的阅读本文章就顺便提及一下,这里不涉及太深的东西,只是简单的介绍。
匿名类型和var关键字是Visual C# 3.0提供的一个新特性或者说是语法糖,var是隐式类型而并不是类型javascript中的var。
var user = new { Id = 1, Name = "张三", Age = 15 };
Console.WriteLine(user.Name);
详解匿名类型
匿名类型并不属于.NET Framework
在MSDN的文档中其实匿名类型并不属于.NET Framework,它属于Visual Studio更准确的来说它属于Visual C# 3.0,不扯太多题外话,再扯下去记得再"论.NET Framework和C#"哈哈。
匿名类型的智能感知
从这边来看匿名类型是可以智能感知的,那是否说明匿名类型就是一个强类型呢?
匿名类型是只读的
匿名类型中的所有属性器除在初始化时候都是只读的,所以一旦初始化成功后它将无法进行赋值。
无法在一个数组内添加两种不同属性的匿名类型
我们来看看反编译之后他们会生产什么?
反编译之后会发现一个<>f__AnonymousType0<int, string, int>,这个类型是什么呢?定义结构跟Tuple<>非常的相像。如果定义了类型那么它不就是一个强类型吗?我们追踪看看。
会发现提示出是由编译器生成的类,我们无法追踪他,也无法确定他是否定义了这个类。
匿名类型到底是不是强类型?
首先不饶那么多弯,我先阐述一下我个人的想法,我个人觉得匿名类型不是一个“强类型”。
当然这边强类型加了引号,其实在C#中所有的类型都是强类型的,因为C#本身就是一个强类型语言。
但这边所指的强类型更倾向于使用,因为匿名类型脱离了var只能将其转换成object类型,那么它将无法拥有神奇的智能感知,再加上var的使用是有限制的,var不能在全局定义,只能在方法体内定义,所以脱离了当前方法体它将不再拥有智能感知的光环。
其实在本人的日常开发中匿名类型使用的极少,几乎没有,个人更倾向把匿名类型使用在数据绑定上,比如把bool类型的IsEnable投射至匿名类型中的new { IsEnable = isEnable ? "是" : "否" }用于友好的数据绑定,但这仅限于这种绑定的地方非常非常少。例如:下拉框的绑定。
结语
这次在博客园的第二篇文章,排版、润色还有所欠缺,希望能坚持写博文以弥补这些问题。
欢迎大家和谐讨论( ̄ˇ ̄)
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,转载文章之后须在文章页面明显位置给出作者和原文连接,谢谢。欢迎大家关注微信号。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码)

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)