购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.10 匿名类型

匿名类型是一个由编译器临时创建的类,它用于存储一组值。如果需要创建一个匿名类型,则可以使用 new 关键字,随后使用对象初始化器来指定该类型包含的属性和值。例如:

编译器将会把上述语句(大致)转换为:

匿名类型只能通过 var 关键字来引用,因为它并没有一个名字。

匿名类型的属性名称可以从一个本身为标识符(或者以标识符结尾)的表达式推断得到,例如:

上述代码等价于:

在同一个程序集内声明的两个匿名类型实例,如果它们的元素名称和类型是相同的,那么它们在内部就是相同的类型:

此外,匿名类型还会重写 Equals 方法来执行结构化相等比较(即数据值的比较):

而相等运算符却执行引用比较:

以下代码创建了一个匿名类型的数组:

匿名类型的对象无法通过方法有效地返回,因为将函数返回类型指定为 var 是非法的:

因此我们只得用 object 或者 dynamic 作为返回值,而每一个调用 Foo 方法的点都需要动态绑定,这种方式会丧失静态类型的安全性(以及Visual Studio的IntelliSense):

匿名类型是不可更改的,因此匿名类型的实例在创建之后无法进行改动。但是,在C# 10中,可以使用 with 关键字创建一个可变更的副本(非破坏性更改)。

匿名类型主要用于编写LINQ查询(参见第8章)。 rDrRkUZ9fr4F3KD6DzWjyFKZ1d/6UIaXiarQjaIoCidD6nZjAfpA6g6ZvC4PHFDq

点击中间区域
呼出菜单
上一章
目录
下一章
×