page 32
②查询
//Predicate Predicate<Product> test = delegate (Product p) { return p.Price > 10m; }; List<Product> matches = products.FindAll(test); Action<Product> print = Console.WriteLine; matches.ForEach(print); //匿名方法 products.FindAll(delegate (Product p) { return p.Price > 10m; }).ForEach(Console.WriteLine); //lambda表达式 products.FindAll((p) => p.Price > 10m).ForEach(Console.WriteLine);
处理未知数据 .NET 2.0引入Nullable<T>结构 让值类型也变为可空 "?"可以为null的学习,我之前已经会了。
LINQ(language integrated Query) C#3核心 ①LINQ太简洁了 链接(join) 筛选(on) 排序(orderby) 投影(select)一句话做完。 太酷了!还在看序的时候看到语法糖是为了LINQ,本来觉得语法糖已经很帅了,搜了一下LINQ的作用也很酷!以后要学习学习。 var filtered = from p in products join s in suppliers on p.SupplierId equals s.SupplierId where p.Price > 10 orderby s.Name, p.Name select new { SupplierName = s.Name, ProductName = p.Name }; ②LINQ管理XML 和 SQL 顺手看了一下XML的基本操作 但工作上没有这需求,在回顾的时候已经忘记了 ③ var类型则是推断类型,也就是说在编译时可以确定的类型, dynamic则是动态类型, 类型不同区别在于一个是编译时确定的, 一个是运行时确定。 ④ 其实他与另一种类型有相当好的配合——就是匿名类。匿名类一般适用于lamba表达式,所以作用范围也只是当前的方法或片段中, 但如果这个匿名对象如果想在其他成员方法中引用,或才为字段/属性时,这个dynamic类型的作用就显示出来的。 COM和动态类型 ①COM C#4特有特性 也用不上... ②动态类型 异步代码 C#5 .NET平台 ①JIT 具体的做法是这样的:当载入一个类型时,CLR为该类型创建一个内部数据结构和相应的函数, 当函数第一被调用时,JIT将该函数编译成机器语言.当再次遇到该函数时则直接从cache中执行已编译好的机器语言. ②发现了此书提起Mono Mono对C#编译器输出了解释,转化为了本地代码,进行JIT编译(查资料发现也使用了AOT)。 网上解释↓ .NET是微软的一个开发平台,简言之相当于Java的jdk,即最基础的开发包,最基础的框架。 Java开发首先安装jdk,而C#开发首先安装.NET。 Java开发借助开发工具eclipse或者idea,C#开发借助开发工具visual studio或者visual studio code。 Java是sun公司的编程语言,C#是微软的编程语言。 Java可以跨平台,微软也希望C#能够跨平台但是却不能够跨平台,微软主要业务来自Windows,如果跨平台,会打击Windows市场。 mono就是为了解决C#跨平台的问题,由Xamarin公司提出的,微软睁一只眼闭一只眼,不支持也不理会,任其自生自灭。 ③运行时 .NET运行时部分相当少的代码,负责确保用IL写的符合CLI规范的方式执行,称为CLR。 炫酷代码