位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 匿名类型

提问人:刘团圆发布时间:2020-12-08

    在编写程序一段时间后,会发现我们要花费很多时间为数据表示创建简单、乏味的类,在数据库应用程序中尤其如此。常常有一系列类只提供属性。本章前面的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也允许查看匿名类型的成员,如图所示。

image.png

注意,这里显示的属性定义为只读属性。这表示,如果要在数据存储对象中修改属性的值,就不能使用匿名类型。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部