美文网首页
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#中的匿名类型

    ​ 在一个项目中遇到了一个关于匿名类型的坑 在C#中的匿名类型是这样创建的: 而这些匿名类型的属性是inter...

  • C#匿名类型

    我们会花费很多的时间为数据表示创建一些简单的类,尤其是在数据库应用程序中。经常会有一系列的类只提供属性。这些类什么...

  • iOS基础之block

    1.block类型-存储代码块的类型 在异步编程时常需要进行函数回调,在C#中会用匿名委托或者lambda表达式讲...

  • C#

    C#语言 语法知识 is 检查一个类型是否兼容另一个类型 返回 bool值 lambda 说简单一点,就是一个匿名...

  • 知识整理

    C#语言 语法知识 is 检查一个类型是否兼容另一个类型 返回 bool值 lambda 说简单一点,就是一个匿名...

  • C#语言入门详解006

    006 C#类型、变量与对象详解 目录 *什么是类型*类型在C#语言中的作用*C#语言的类型系统*变量、对象与内存...

  • C#之托管与非托管资源

    C#中的数据类型 C#中的所有类型都是(直接或间接)从System.Object类型派生的。C#的类型被分成两大类...

  • var lady first

    C# 中的隐式类型的局部变量是为了支持匿名类型而出现的,并且也是为了解决一部分查询操作返回的结果是 IQuerya...

  • C#匿名函数

    在 2.0 之前的 C# 版本中,声明委托的唯一方式是使用命名方法。 C# 2.0 引入匿名方法,在 C# 3.0...

  • 第一部分:C#语言基础

    第1章 C#类型基础 C#中的两种类型:值类型和引用类型 1.1 值类型和引用类型 值类型包括了结构和枚举,引用类...

网友评论

      本文标题:C#匿名类型

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