.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 基本数据类型
随机推荐
- JDBC的学习笔记-手动实现
JDBC是SUN公司提供的一套用于数据库操作的接口,Java程序员只需要面向这套接口编程即可.不同的数据库厂商,需要针对这套接口,提供不同实现. 使用JDBC的好处:1.程序员不需要关注不同数据库的细 ...
- springIOC源码接口分析(二):ConfigurableBeanFactory
一 继承功能 1 SingletonBeanRegistry接口 此接口是针对Spring中的单例Bean设计的.提供了统一访问单例Bean的功能,类中定义了以下方法: 2 HierarchicalB ...
- JQuery--JQuery面向对象编程快速入门-插件开发
JQuery源码片段分析 (function(window){ /** * jQuery是一个函数 是一个对象 是一个构造器函数 */ var jQuery = function( selector, ...
- axure如何实现提示框3s后自动消失
本示例基于axure8 实现 1.先做两个元件,一个按钮,一个提示框 2.将弹框“发布成功提示”设置为,页面载入时隐藏,这样预览页面时,该弹框是隐藏状态 3.给按钮添加交互样式,如下: 4.预览,点击 ...
- 项目架构级别规约框架Archunit调研
背景 最近在做一个新项目的时候引入了一个架构方面的需求,就是需要检查项目的编码规范.模块分类规范.类依赖规范等,刚好接触到,正好做个调研. 很多时候,我们会制定项目的规范,例如: 硬性规定项目包结构中 ...
- 「C++ 篇」答应我,别再if/else走天下了可以吗
每日一句英语学习,每天进步一点点: "Without purpose, the days would have ended, as such days always end, in disi ...
- 什么?接口中方法可以不是抽象的「JDK8接口新语法的深度思考」
先赞后看,养成习惯 文本已收录至GitHub开源仓库 Lu_JavaNodes 码云仓库地址Lu_JavaNodes,包含教程涉及所有思维导图,案例代码和后续讲解视频,欢迎Star增砖添瓦. 前言 在 ...
- javascript A*算法 寻路算法 获取最短路径算法
//A算法 自动寻路 路径 class GetAutoPath{ constructor(id, map, sPos, ePos, mapArr){ //this.type = id.type; th ...
- tensorflow roadshow 全球巡回演讲 会议总结
非常荣幸有机会来到清华大学的李兆基楼,去参加 tensorflow的全球巡回.本次主要介绍tf2.0的新特性和新操作. 1. 首先,tensorflow的操作过程和机器学习的正常步骤一样,(speak ...
- Linux bash管道符“|”使用介绍与例子
https://blog.csdn.net/wangqianyilynn/article/details/75576815