C# 3.0新特性(二).
一、 对象与集合初始化器
1、 在以前的版本的类的构造函数中,可能会提供多个重载版本。有了对象初始化器就不用为成员的多种组合多个重载,同时也使得代码更易阅读。
同样是C# 3.0特性(一)中的Doctor类,3.0之前可能需要提供这样的构造函数
1 2 3 4 5 6 7 8 | public Doctor() { } public Doctor( string x, string n) { xueXing = x; Name = n; } |
C# 3.0之后不一定要这么做了,在“客户端”用代码
1 | Doctor doctor = new Doctor { Name = "XiaoPan" ,XueXing = "O" }; |
来表示构造一个Nam为”XiaoPan,XueXing为”O”的Doctor实例。
2、 同样的,对于集合也有类似初始化操作:
1 | 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 { |
1 2 3 4 5 6 7 | page = 1, //records = listTX.Count, total = listTX.Count / 10 + 1, rows = txEntity }; return Json(gridEntity, JsonRequestBehavior.AllowGet); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述