.NET知识梳理——6.lambda
1. lambda
1.1 匿名方法lambda表达式
Lambda表达式
Lambda是一个匿名方法,实例化委托的一个参数,编译的时候会产生一个密封类,同时增加一个方法。
Lambda表达式的演化
过程如下:
public delegate void ShowInfo(string name, int age);
1.1.1 .NET Framework 1.0
ShowInfo showInfo = new ShowInfo(GetInfo);
showInfo.Invoke("Olive", 16);
1.1.2 .NET Framework 2.0 匿名方法,delegate关键字
showInfo = new ShowInfo(delegate (string name, int age) {
Console.WriteLine($"2.0:Age is {age},Name is {name}");
});
showInfo.Invoke("墨遥", 30);
1.1.3 .NET Framework 3.0 去掉delegete关键字,增加一个箭头
showInfo = new ShowInfo((string name, int age) => {
Console.WriteLine($"3.0:Age is {age},Name is {name}");
});
showInfo.Invoke("XF", 116);
showInfo = new ShowInfo((name, age) =>//省略参数类型,编译器的语法糖,根据委托推算,编译时有类型
{
Console.WriteLine($"语法糖:Age is {age},Name is {name}");
});
showInfo.Invoke("HY", 20);
showInfo = new ShowInfo((name, age) => Console.WriteLine($"语法糖:Age is {age},Name is {name} 如果方法体只有一行,可以去掉大括号"));
showInfo("遥", 21);
showInfo=(name,age)=>Console.WriteLine($"语法糖:Age is {age},Name is {name} 可以省略new 委托 ");
showInfo("哈哈", 18);
1.2 匿名类 var 扩展方法
1.2.1 匿名类 var
.NET Framework 3.0 出现匿名类var。如下所示:
var person = new { Id = 1, Name = "Olive", Age = 16 };
//匿名类属性只能在创建时赋值,不能修改属性值
1.2.2 扩展方法
扩展方法,静态类中的静态方法,第一个参数前加this 修饰
public static class ExtendMethod
{
public static void ShowInfo(this Person p)
{
Console.WriteLine($"Person Info is Id={p.Id},Name={p.Name},Age={p.Age}");
}
}
调用如下:
Person p = new Person() { Id = 116, Name = "Olive", Age = 30 };
p.ShowInfo();//ShowInfo即为扩展方法,Person本身并无此方法。
扩展方法调用,很像实例方法,就像扩展了Person的逻辑
扩展方法的使用场景:
- 第三方的类,不适合修改源码,可以通过扩展方法增加逻辑
- 适合组件式开发的扩展(.NetCore),定义接口或者类,是按照最小需求,但是在开发的时候又经常需要一些方法,就通过扩展方法
- 扩展一些常见操作(会污染基础类型,一般少为object 没有约束的泛型去扩展)
1.3 Linq to object
Linq To Object 是在Enumerable类,针对IEnumerable数据(指的是内存数据)进行的一些列的封装。
Where:把对数据过滤的通用操作完成,把可变的过滤逻辑交给委托
Select:把对数据转化的通用操作完成,把可变的转换逻辑交给委托
OrderBy:排序
.NET知识梳理——6.lambda的更多相关文章
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
- solr DIH 知识梳理
solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...
- Anliven - 基础知识梳理汇总 - 软件测试
基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
- java基础知识梳理
java基础知识梳理 1 基本数据类型
随机推荐
- 高阶函数及 map、reduce、filter 的实现
博客地址:https://ainyi.com/85 2020 开年国家经历了不少困难,最为凶猛的局势就是新型冠状病毒的蔓延,国务院最终决定春节假期延长至==2 月 2 号==:公司决定 3 - 7 号 ...
- 深入理解JDK中的Reference原理和源码实现
前提 这篇文章主要基于JDK11的源码和最近翻看的<深入理解Java虚拟机-2nd>一书的部分内容,对JDK11中的Reference(引用)做一些总结.值得注意的是,通过笔者对比一下JD ...
- 最新2.7版本丨DataPipeline数据融合产品最新版本发布
此次发布的2.7版本在进一步优化产品底层数据处理逻辑的同时更加注重提升用户在数据融合任务的日常管理.运行监控及资源分配等管理方面的功能增强与优化,力求帮助大家更为直观.便捷.稳定地管理数据融合任务,提 ...
- tf识别非固定长度图片ocr(数字+字母 n位长度可变)- CNN+RNN+CTC
先安装必须的库 tensorflow_gpu==1.15.0 numpy opencv_python github: https://github.com/bai-shang/crnn_ctc_ocr ...
- 学习CSS之用CSS绘制一些基本图形
一.三角形 如下图,通过设置 border 的大小和颜色可以形成四个三角形: 上图对应的代码为: /* 三角形 */ .triangle { width: 0; height: 0; ...
- BZOJ 3339 Rmq Problem(离线+线段树+mex函数)
题意: q次询问,问[l,r]子区间的mex值 思路: 对子区间[l,r],当l固定的时候,[l,r]的mex值对r单调不减 对询问按照l离线,对当前的l,都有维护一个线段树,每个叶节点保存[l,r] ...
- 拖延症?贪玩?来试试"百万金币时间管理法"
中午吃完饭就想休息? 一到假期就起不来? 总是想玩游戏? 究其原因是因为我们没有深刻意识到时间的价值. 这点在大气爱智慧的视频:懂这个道理,保证让你快速自律起来!拯救拖延症,更好的戒掉不良习惯中有讲到 ...
- 腾讯云Centos服务器部署问题
在Centos7上部署Tomcat过程 下载并安装JDK 下载并部署Tomcat 打开Centos中对应的端口(默认80) 这几步操作很清楚,但首次使用Centos7时遇到了一个问题,外网无法访问服务 ...
- python学习(2)关于字符编码
关于字符编码的学习内容笔记如下: 1.计算机只能用0和1来进行记录和存储.计算机是二进制. 2.ASCII(American Standard Code for Information Interch ...
- centos下升级php到5.6
今天正好用空把php环境升级到5.6版本,首先我之前的环境是源码包编译的lnmp环境 首先到php官方网站上下载一个php5.6的tar包,放到机器上面后,开始安装,安装前先将nginx,mysql, ...