.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 基本数据类型
随机推荐
- .net core3.1 webapi + element-ui upload组件实现文件上传
首先,先看我个人的的项目结构. 这个webapi项目是专门用来做图片上传,其中分为两个控制器:单图片上传和多图片上传.而我接下来主要讲的还是单文件上传,对于多文件的上传,我暂且尚未研究成功. 其中pi ...
- python 利用selenium爬取百度文库的word文章
今天学习如何使用selenium库来爬取百度文库里面的收费的word文档 from selenium import webdriver from selenium.webdriver.common.k ...
- 1、OSI参考模型
网络的层次模型:Core layer (核心层):高速转发,不建议做策略 Distribution layer (分布层,汇聚层):基于策略连接(路由控制,安全策略)Access layer (接入 ...
- 时序数据库 Apache-IoTDB 源码解析之前言(一)
IoTDB 是一款时序数据库,相关竞品有 Kairosdb,InfluxDB,TimescaleDB等,主要使用场景是在物联网相关行业,如:车联网.风力发电.地铁.飞机监控等等,具体应用案例及公司详情 ...
- mycat - 数据库中间件 学习记录4
mycat的配置 cacheservice.properties:路由缓存相关配置文件 index_to_charset.properties:字符集映射关系 rule.xml:分片规则 schema ...
- HTML兼容问题及解决办法
标准浏览器子元素不会撑开父元素设置好的宽度,IE6下会的: <style> .box{ width:400px;} .left{ width:200px;height:300px;back ...
- who 命令
1)显示系统启动时间 [root@node1 ~]# who -b 系统引导 2020-01-10 11:41 2)显示系统当前的运行级别 [root@node1 ~]# who -r 运行级别 3 ...
- yum仓库配置与内网源部署记录
使用yum的好处主要就是在于能够自动解决软件包之间的依赖.这使得维护更加容易.这篇文章主要就是记录部署内网源的操作过程以及yum工具如何使用 因为需要.数据库要从Oracle迁移至MySQL.在部署M ...
- k8s系列---Service之ExternalName用法
需求:需要两个不同的namespace之间的不同pod可以通过name的形式访问 实现方式: A:在其他pod内ping [svcname].[namespace] ping出来到结果就是svc的ip ...
- docker-enter 安装
github : https://github.com/sequenceiq/docker-enter [root@localhost ~]# docker run --rm -v /usr/loca ...