C#匿名类型

2015-08-02  本文已影响990人  天堂迈舞

我们会花费很多的时间为数据表示创建一些简单的类,尤其是在数据库应用程序中。经常会有一系列的类只提供属性。这些类什么也没做,只是存储结构化数据。
匿名类型(anonymous type)是简化这种编程模型的一种方式。其原理是使用C#编译器根据要存储的数据自动创建类型,而不是定义简单的数据存储类型。
例如:

var student = new {
     name = "amvincible",
     country = "China",
     sex = "male",
     hobby = "female",
     age = 21
};
  • 这里使用了var关键字,因为匿名类型没有可以使用的标识(zhi)符,其实它内部是有的,但是在代码中不能使用。

IDE在检测到匿名类型定义后,会更新ItelliSense 智能感知 ,可以看到如图所示的匿名类型。

匿名类型智能感知.png

其中student的类型是'a。显然,不能再代码中使用这个类型,也不是一个合法的标识符。' 符号用于智能感知中表示匿名类型,智能感知还能查看匿名类型的成员。

类型成员.png
注意,属性的定义是只读类型。这表示,如果要在数据存储对象中修改属性的值,就不能使用匿名类型。如图所示。 属性只读.png

示例代码

using System;

namespace demo
{
    class Program
    {
        static void Main(string[] args)
        {
            var students = new[]
            {
                new
                {
                name = "amvincible",
                country = "China",
                sex = "male",
                hobby = "female",
                age = 21
                },
                new
                {
                name = "amvincible",
                country = "China",
                sex = "male",
                hobby = "female",
                age = 21
                },
                new
                {
                name = "amvincible",
                country = "America",
                sex = "male",
                hobby = "female",
                age = 25
                },
            };
            Console.WriteLine(students[0].ToString());
            Console.WriteLine(students[0].GetHashCode());
            Console.WriteLine(students[1].GetHashCode());
            Console.WriteLine(students[2].GetHashCode());
            Console.WriteLine(students[0].Equals(students[1]));
            Console.WriteLine(students[0].Equals(students[2]));
            Console.WriteLine(students[0]==students[1]);
            Console.WriteLine(students[0]==students[2]);
            Console.ReadKey();


        }
    }
}

输出

{ name = amvincible, country = China, sex = male, hobby = female, age = 21 }
1324614728
1324614728
-157725995
True
False
False
False

示例说明

这个示例创建了一个匿名类型对象的数组,然后使用它测试匿名类型提供的成员。

[1] 本文部分内容来自《C#入门经典 (第六版)》

上一篇 下一篇

猜你喜欢

热点阅读