对象初始化器(Object Initializers) 和 集合初始化器(Collection Initializers) ,就是简化我们的代码,让本来几行才能写完的代码一行写完。这样在LINQ的使用中,我们才不会把一个LINQ表达式写的复杂。
Object Initializers
 Object Initializer的使用很简单:在通过new 关键字创建对象的时候,将所需的Proeprty置于Type name后的{}中。比如:

 1class staff
 2    
{
 3        public string Name { get; set; }

 4        public int  Age{get; set;}
 5        public string Add;       
 6         public
 staff()
 7        { }

 8        public staff(int i, string s)
 9        
{
10            Name =
 s;
11            Age =
 i;
12        }

13    }

使用对象初始化器

1Console.WriteLine("Initializer");
2            staff s1 = new staff(12, "sss") { Name = "GUOJUN" };
3            staff s3 = new staff(12, "sss") { Name = "GUOJUN", Age = 27,Add="HuBei" };
4            staff s2 = new staff { Name = "IORI", Age = 27 };

在上面的例子中,我们通过一句代码(staff s1 = new staff(12, "sss") { Name = "GUOJUN" };)实现对staff 对象的创建和初始化。
注意:
在使用对象初始化器时,隐式的调用了默认的构造函数(例如S2的创建及初始化)。
在使用对象初始化器时,也可以指定调用任何自定义的构造函数。(例如S1,S3的创建及初始化)。
可以一次为多个(不一定要全部)属性赋值,

1staff s1 = new staff(12, "sss") { Name = "GUOJUN" };
2staff s3 = new staff(12, "sss") { Name = "GUOJUN", Age = 27,Add="HuBei" };

C# 3.x这些Feature仅仅是基于一种Programming Language层面的新特性而已,这些特性通过Programming Language对应的Compiler在编译过程添加一些辅助的Code来实现。 通过编译我们看看变成什么样子:

 1public static void fnInitializer()
 2{
 3    Console.WriteLine("Initializer");
 4    staff <>g__initLocal3 = new staff(12, "sss");
 5    <>g__initLocal3.Name = "GUOJUN";
 6    staff s1 = <>g__initLocal3;
 7    staff <>g__initLocal4 = new staff(12, "sss");
 8    <>g__initLocal4.Name = "GUOJUN";
 9    <>g__initLocal4.Age = 0x1b;
10    <>g__initLocal4.Add = "HuBei";
11    staff s3 = <>g__initLocal4;
12    staff <>g__initLocal5 = new staff();
13    <>g__initLocal5.Name = "IORI";
14    <>g__initLocal5.Age = 0x1b;
15    staff s2 = <>g__initLocal5;
16    Console.WriteLine(s1.Name);
17    Console.WriteLine(s1.Age);
18    Console.WriteLine(s2.Name);
19}

我想上面的代码就不用我太多的说明,大家一定明白。我只说明一点:  调用对应Class的对应的Constructor创建一个临时对象。

Collection Initializer 
 使用集合初始化器,如下:

 1 List<staff> myListOfstaff = new List<staff>
 2            {
 3                new staff {Name = "GUOJUN", Age = 27 },
 4                new staff {Name = "IORI", Age = 27 },
 5                new staff(12, "sss") { Name = "GUOJUN" }
 6            };
 7            foreach (staff pt in myListOfstaff)
 8            {
 9            Console.WriteLine(pt);
10            }

分析Object Initializer的本质一样,我们之后看看通过Compiler变异后的Code是什么样子,就会对Collection Initializer的实现有一个全面的了解:

 1    List<staff> <>g__initLocal6 = new List<staff>();
 2    staff <>g__initLocal7 = new staff();
 3    <>g__initLocal7.Name = "GUOJUN";
 4    <>g__initLocal7.Age = 0x1b;
 5    <>g__initLocal6.Add(<>g__initLocal7);
 6    staff <>g__initLocal8 = new staff();
 7    <>g__initLocal8.Name = "IORI";
 8    <>g__initLocal8.Age = 0x1b;
 9    <>g__initLocal6.Add(<>g__initLocal8);
10    staff <>g__initLocal9 = new staff(12, "sss");
11    <>g__initLocal9.Name = "GUOJUN";
12    <>g__initLocal6.Add(<>g__initLocal9);
13    List<staff> myListOfstaff = <>g__initLocal6;
14    foreach (staff pt in myListOfstaff)
15    {
16        Console.WriteLine(pt);
17    }
18

Collection Initializer的实现和Object Initializer很类似。

转载于:https://www.cnblogs.com/gjcn/archive/2008/04/15/1154071.html

c#3.0系列:Object Initializer 和 Collection Initializer相关推荐

  1. 深入理解C# 3.x的新特性(5):Object Initializer 和 Collection Initializer

    深入理解C# 3.x的新特性系列自开篇以后,已经有两个月了.在前面的章节中,我们先后深入讨论了C# 3.x新引入的一些列新特性:Anomynous Type.Extension Method.Lamb ...

  2. Asp.net MVC2.0系列文章-编辑和删除新闻操作

    上一篇文章,我们简单地完成了新闻内容的展示功能(Asp.net MVC2.0系列文章-显示列表和详细页面操作),此篇文章,我们使用Asp.net MVC2.0实现新闻记录的编辑和删除功能. 创建Vie ...

  3. 实战Spring Boot 2.0系列(一) - 使用Gradle构建Docker镜像

    前言 通常我们使用 Dockerfile 来构建项目的 Docker 镜像.但是也有使用 gradle 在编译项目的时候一起把镜像给 构建 并 上传 的需求.本文将会讲解如何使用 gradle 编写并 ...

  4. SpringBoot 2.0 系列003 -- 自定义Parent

    为什么80%的码农都做不了架构师?>>>    SpringBoot 2.0 系列003 --自定义Parent 默认我们使用SpringBoot的方式是通过SB的parent项目的 ...

  5. SpringBoot 2.0 系列005 --启动实战之SpringApplication应用

    为什么80%的码农都做不了架构师?>>>    SpringBoot 2.0 系列005 --启动实战之SpringApplication应用 2.X 官方示例 注意是只使用了@En ...

  6. 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引

    [源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0  1.积少成 ...

  7. SpringBoot 2.0 系列001 -- 入门介绍以及相关概念

    为什么80%的码农都做不了架构师?>>>    SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://proje ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  9. vSphere 5.0系列之二 vSphere Client的安装

    1.安装包如下载所示,解压之后,可选择安装不同语言 2.开始安装 3.专利说明 4.直接同意 5.两个都要填写 6.安装目录自己可以更改 7.单击安装 8.开始安装的过程 9.到这一步已基本安装完成了 ...

最新文章

  1. 取eclipse console 打印字符串,判断日志是否有异常
  2. MySQL输入密码后闪退的解决方法
  3. UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用
  4. httpclient爬取性感美图
  5. HTTP/3 来啦,你还在等什么?赶紧了解一下
  6. 5个专注于检测和预测异常的Java工具分享
  7. C语言程序怎么保存文件,急求如何将下列C语言程序数据存储到文件中?
  8. 【2010】asp.net GridView分页的实现
  9. Dos命令查看端口占用
  10. SQL注入漏洞(类型篇)
  11. 博客目录及最新Github下载地址
  12. gsp计算机管理权限,新gsp计算机权限设置
  13. 单例模式中的懒汉模式和饿汉模式是什么?
  14. ppt五种经典字体组合
  15. 将多个Excel工作簿合并到一个Excel工作簿中
  16. 计算机键盘指示灯不亮也不启动不了,终于明白电脑开机黑屏鼠标键盘灯不亮
  17. 测试网线是否正常的方法有哪些?
  18. Adobe Premiere Pro 2020 入门教程(三)首选项和快捷键的设置
  19. java trigger_Quartz教程四:Trigger
  20. Kibana:如何在 Discover 中显示图片及播放音乐

热门文章

  1. javascript经典实例_JavaScript 经典实例收集整理
  2. 如何制作印章_电子公章怎么制作
  3. 唐尼vr眼镜好吗_科普:眼镜片有哪些种类?镜片越薄越好吗?无框眼镜配什么材质?...
  4. python 面试题 2020_2020年最全python面试题
  5. python mq_RabbitMQPython
  6. 通俗易懂量子计算的原理
  7. Codeforces 987B. High School: Become Human
  8. ansible(3)——主机列表,ssh,公钥私钥
  9. Mysql(7)——auto_increment简介
  10. 服务器同时登入会被挤下来吗_「英雄联盟手游」苹果iOS版LOL日服公测,日本服务器卡爆!...