思维的乐趣

Enjoy it
随笔 - 84, 文章 - 0, 评论 - 63, 阅读 - 21万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

.NET/C#中的匿名类型

Posted on   szh114  阅读(8133)  评论(1编辑  收藏  举报

 

有时候,我们需要封装一组数据,只有数据,没有方法,并且只用于当前程序,不需要在项目间重用,这时候,如果是传统的使用类来封装的话,大概会是下面这种样子:

 

internal class SomeData

{

  //定义一系列私有成员变量

  //创建属性来封装每一个数据成员

  //重写方法的ToString()来输出每一个数据成员

  //重写GetHashCode() 及Equals()来实现基于值的相等性

}

 

这个虽然不难,但如果数据量比较多,显然写起来就比较麻烦了。因此,C#3.0以后提供了一个叫匿名类型的机制,来简化这一任务。如下:

 

var myCar = {Color="Black",Make="China",Name="Puma",Price=5000000);

 

这就是一个匿名类型的对象!因为这个类并没有具体的类型名可用,因此,这时是var派用场的好时候。C#编译器在编译时会自动生成名称唯一的一个类,并且所有的成员变量都自动在后台被封装为属性。所有的匿名类型都直接继承自System.Object,并且重写了方法Equals(),GetHashCode(),ToString()等方法。其中,ToString()是根据每一个成员变量的名称、值对,生成一个拼接字符串。

 

当定义了两个相同的字段、值对的匿名对象时,用Equals()比较,就会发现它们是相等的。但是,这时的 == , != 运算符是不能用的,因为编译器并没有自动重载这些。

 

当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型相同时,编译器就会只生成一个类定义,而不是各一个。

 

匿名类型对象中仍然可以再包含匿名对象。

 

在LINQ中,匿名类型又会派上大用场!!!

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示