美文网首页
C#匿名类型

C#匿名类型

作者: 天堂迈舞 | 来源:发表于2015-08-02 16:54 被阅读990次

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

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

    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

    示例说明

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

    • ToString()实现输出每个属性的值。
    • 第五、六个输出使用Equals()方法,比较匿名类型对象的状态,如果一个对象的每个属性都和另一个对象对应的属性值相同,那么结果就是true。
    • 使用==运算符比较对象引用,数组中的每一项都引用匿名类型的不同实例,结果是false。

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

    相关文章

      网友评论

          本文标题:C#匿名类型

          本文链接:https://www.haomeiwen.com/subject/cbrvqttx.html