C# 匿名类型
在编写程序一段时间后,会发现我们要花费很多时间为数据表示创建简单、乏味的类,在数据库应用程序中尤其如此。常常有一系列类只提供属性。本章前面的Animal类就是一个很好的例子:
public class Animal
{
public string Name { get; set; }
public int Age { get; set; }
public double Weight { get; set; }
}
这个类什么也没做,只是存储结构化数据。在数据库或电子表格中,可以把这个类看成表中的一行。可以保存这个类的实例的集合类应表示表或电子表格中的多个行。
这是类完全可以接受的一种用法,但编写这些类的代码比较单调,对底层数据模式的任何修改都需要添加、删除或修改定义类的代码。
匿名类型(anonymous type)是简化这个编程模型的一种方式。其理念是使用C#编译器根据要存储的数据自动创建类型,而不是定义简单的数据存储类型。
可按如下方式实例化前面的Animal类型:
Animal animal = new Animal
{
Name = "Benjamin",
Age = 42,
Weight = 185.4
};
也可以使用匿名类型,如下所示:
var animal = new
{
Name = "Lea",
Age = 11,
Weight = 30.2
};
这里有两个区别。第一,使用了var关键字。这是因为匿名类型没有可以使用的标识符。稍后可以看到,它们在内部有一个标识符,但不能在代码中使用。第二,在new关键字的后面没有指定类型名,这是编译器确定我们要使用匿名类型的方式。
IDE检测到匿名类型定义后,会相应地更新IntelliSense。通过前面的声明,可以看到如下所示的匿名类型。
var animal = new
{
Nante = "Lea",
Age = 11,
Weight = 30.2
};
aniotal
[*] (local variable)'a animal
Anonymous Types:
'a is new {string Name, mt Age. double Weight)
其中,变量animal的类型是'a。显然,不能在代码中使用这个类型——它甚至不是合法的标识符名称。'符号用于在IntelliSense中表示匿名类型。InteiliSense也允许查看匿名类型的成员,如图所示。
注意,这里显示的属性定义为只读属性。这表示,如果要在数据存储对象中修改属性的值,就不能使用匿名类型。
点击加载更多评论>>