C# 3.0新特性(二).
一、 对象与集合初始化器
1、 在以前的版本的类的构造函数中,可能会提供多个重载版本。有了对象初始化器就不用为成员的多种组合多个重载,同时也使得代码更易阅读。
同样是C# 3.0特性(一)中的Doctor类,3.0之前可能需要提供这样的构造函数
public Doctor() { } public Doctor(string x,string n) { xueXing = x; Name = n; }
C# 3.0之后不一定要这么做了,在“客户端”用代码
Doctor doctor = new Doctor { Name = "XiaoPan",XueXing = "O" };
来表示构造一个Nam为”XiaoPan,XueXing为”O”的Doctor实例。
2、 同样的,对于集合也有类似初始化操作:
List<int> num = new List<int>{0,1,2,6,7,8,9};
3、 对象初始化器实际上利用了编译器对对象中对外可见的字段和属性进行按序赋值,是一种编译时技术。
二、匿名类型
1、可以使用new关键字调用匿名初始化器创建一个匿名类型的对象,该对象直接继承自System.Object,其成员是编译器根据初始化器推断而来的一些读写属性, 匿名类型无法强制转换为除 System.Object 以外的任何类型。
2、简单的来说,就是隐式类型局部变量+对象初始化器,可以“随心所欲”构造一个对象。比如var patient = new {Name = "XiaoXiaoPan",JiuZhenHao="001",XingBie="男"};就得到一个包含姓名、就诊号、性别的病人对象。
4、匿名类型无法强制转换为除 object 以外的任何类型。
3、匿名类型在构造临时数据结构中显得有用,对对象集合做投影操作也比较实用。首先获得图形数据的集合,其中每个图形对象中有来源、内容等等属性,在具体返回Json数据之前要构造特定的结构,且对图形对象有一个投影的过程(并不需要其中的每个字段)。其中的from .. in …select用到了linq的语法,后面还会谈到linq。
IList<XiTongTXModel.TuXing> listTX = txModel.GetTuXingList(gongnengid,moshiid); if (listTX.Count > 0) { //按特定格式返回数据 var txEntity = from s in listTX select new { /*id = s.Id,*/ cell = new string[] { (s.NeiRong.Length>50)?s.NeiRong.Replace("\r\n","").Substring(0,50)+"..." : s.NeiRong, s.LaiYuan, s.FenLeiMC, s.JieTuID, s.NeiRong, s.YongHuXM, s.XiuGaiSJ, s.ShuoMing, } }; var gridEntity = new {
page = 1, //records = listTX.Count, total = listTX.Count / 10 + 1, rows = txEntity }; return Json(gridEntity, JsonRequestBehavior.AllowGet); }