C# 3.0 / C# 3.5 对象集合初始化器、匿名类
对象集合初始化器
在 .NET 2.0 中构造一个对象的方法一是提供一个重载的构造函数,二是用默认的构造函数生成一个对象,然后对其属性进行赋值。
在 .NET 3.5/C# 3.0 中,我们有一种更好的方式来进行对象的初始化,那就是使用对象初始化器。(这个特性也是匿名类的一个基础,所以放在匿名类之前介绍)
对象初始化:
User user = new User { Id = , Name = "Zouqj", Age = };
集合初始化:
List<Dog> dogs = new List<Dog>()
{
new Dog() { Name = "Tom", Age = },
new Dog() { Name = "Lucy", Age = }
};
创建并初始化数组:
string[] array = { "西施", "貂蝉" };
匿名类
匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无须首先显式定义一个类型。(每个属性的类型由编译器推断)
我们可以使用 new { object initializer } 或 new[ ] { object, …} 来初始化一个匿名类或不确定类型的数组。
匿名类的对象需要使用 var 关键字声明。示例如下:
var p = new { Id = , Name = "zouqj", Age = }; //属性名字和顺序不同会生成不同类
应用场景:
直接使用 select new { object initializer } 这样的语法就是将一个 LINQ 查询的结果返回到一个匿名类中。
注意:
当出现“相同”的匿名类时,编译器只会创建一个匿名类。(类型名由编译器生成,并且不能在源代码级使用)
编译器如何区分匿名类是否相同:
属性名、属性值(因为这些属性是根据值来确定类型的)、属性个数、属性的顺序。
匿名类的属性是只读的,可放心传递,并且可用在线程间共享数据。
C# 3.0 / C# 3.5 对象集合初始化器、匿名类的更多相关文章
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- C#语法糖之第二篇: 参数默认值和命名参数 对象初始化器与集合初始化器
今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完 ...
- C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法
1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...
- C# 对象初始化器和集合初始化器
/// <summary>/// 图书类/// </summary>public class Book { /// <summary> /// 图书 ...
- Linq专题之集合初始化器
集合初始化器用来初始化一个集合,和对象初始化器有点类似,都是用一对{}来初始化. using System; using System.Collections.Generic; using Syste ...
- .NET 中创建支持集合初始化器的类型
对象初始化器和集合初始化器只是语法糖,但是能让你的代码看起来更加清晰.至少能让对象初始化的代码和其他业务执行的代码分开,可读性会好一些. 本文将编写一个类型,可以使用集合初始化器构造这个类型.不只是添 ...
- 编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]
前言 软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...
- C#程序编写高质量代码改善的157个建议【16-19】[动态数组、循环遍历、对象集合初始化]
前言 软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...
- C# 对象集合初始化
一.自动实现的属性 public class Person { // C# 3之前我们定义属性时,一般会像下面这样去定义 // 首先会先定义私有字段,再定义属性来对字段进行访问 //private s ...
随机推荐
- 不平衡数据下的机器学习方法简介 imbalanced time series classification
imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...
- jQuery常见用法
jQuery有好多版本本,无法同时引用两个不同的版本,容易造成混乱,用哪一个,调用哪一个.\ jQuery引用到<head></head>中,页面加载时就需要特效调用这些方法. ...
- C#winform窗体利用系统抓取关闭按钮事件
const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = ...
- Oarcle之单行函数(下)
1.字符函数 ltrim 去除字符串左边指定字符,如果不设定第二个参数,则默认去除空格 rtrim去除字符串右边指定字符,如果不设定第二个参数,则默认去除空格 例如:select ltrim (‘a ...
- 高版本mysql8.0解压版安装步骤
解压版安装操作官网下载: mysql-installer-community-8.0.12.0.msi如上操作: http://www.cnblogs.com/elfin/p/9429877.html ...
- Node.js建立服务、路径处理与响应
通过Node.js创建一个web服务器,要写的代码可能不是最少的,但是一定是最容易理解的. 用6行代码创建的web服务器 当在浏览器中访问http://127.0.0.1:1337会看到自定义的字样 ...
- 高级shell 脚本
1.函数 函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用.要在脚本中使用该代码块时,只要使用所起的函数名就行了(这个过程称为调用函数).本节将会介绍如何在shell脚本中创建和使用函数 创 ...
- qt连接数据库Sqlite
#include <QCoreApplication> #include <QDebug> #include <QSqlDatabase> #include < ...
- 从手机中导出apk
输入指令adb devices, 出现类似下面信息,说明设备连接成功. List of devices attached HT4C3JT00386 device 3.查看该手机所有安装包的包名, 输入 ...
- ValueObject
ValueObject When programming, I often find it's useful to represent things as a compound混合物. A 2D co ...