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的逻辑

扩展方法的使用场景:

  1. 第三方的类,不适合修改源码,可以通过扩展方法增加逻辑
  2. 适合组件式开发的扩展(.NetCore),定义接口或者类,是按照最小需求,但是在开发的时候又经常需要一些方法,就通过扩展方法
  3. 扩展一些常见操作(会污染基础类型,一般少为object  没有约束的泛型去扩展)

1.3        Linq to object

Linq To Object 是在Enumerable类,针对IEnumerable数据(指的是内存数据)进行的一些列的封装。

Where:把对数据过滤的通用操作完成,把可变的过滤逻辑交给委托

Select:把对数据转化的通用操作完成,把可变的转换逻辑交给委托

OrderBy:排序

.NET知识梳理——6.lambda的更多相关文章

  1. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  2. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  3. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. solr DIH 知识梳理

    solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...

  7. Anliven - 基础知识梳理汇总 - 软件测试

    基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...

  8. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  9. java基础知识梳理

    java基础知识梳理 1 基本数据类型

随机推荐

  1. 缓存 ehcache

    只是用于自己记录,防止日后忘记,回看所用 第一步:配置ehcahe 缓存 <?xml version="1.0" encoding="UTF-8"?> ...

  2. Shiro Web集成及拦截器机制(四)

    Shiro与 Web 集成 Shiro 提供了与 Web 集成的支持,其通过一个 ShiroFilter 入口来拦截需要安全控制的 URL,然后进行相应的控制,ShiroFilter 类似于如 Str ...

  3. python接口自动化测试 - 数据驱动DDT模块的简单使用

    DDT简单介绍 名称:Data-Driven Tests,数据驱动测试 作用:由外部数据集合来驱动测试用例的执行 核心的思想:数据和测试代码分离 应用场景:一组外部数据来执行相同的操作 优点:当测试数 ...

  4. Docker快速上手之部署SpringBoot项目

    Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...

  5. WeChall_Training: PHP LFI (Exploit, PHP, Training)

    Your mission is to exploit this code, which has obviously an LFI vulnerability: GeSHi`ed PHP code 1 ...

  6. 深度学习中的特征(feature)指的是什么?

    一般在machine learning意义上,我们常说的feature,是一种对数据的表达.当然,要衡量一种feature是否是合适的表达,要根据数据,应用,ML的模型,方法....很多方面来看.一般 ...

  7. Codeforces 1175F The Number of Subpermutations (思维+rmq)

    题意: 求区间[l, r]是一个1~r-l+1的排列的区间个数 n<=3e5 思路: 如果[l,r]是一个排列,首先这里面的数应该各不相同,然后max(l,r)应该等于r-l+1,这就能唯一确定 ...

  8. BZOJ 1046 [HAOI2007]上升序列(LIS + 贪心)

    题意: m次询问,问下标最小字典序的长度为x的LIS是什么 n<=10000, m<=1000 思路: 先nlogn求出f[i]为以a[i]开头的LIS长度 然后贪心即可,复杂度nm 我们 ...

  9. Codeforces 922 C - Robot Vacuum Cleaner (贪心、数据结构、sort中的cmp)

    题目链接:点击打开链接 Pushok the dog has been chasing Imp for a few hours already. Fortunately, Imp knows that ...

  10. codeforces 540D Bad Luck Island (概率DP)

    题意:会出石头.剪刀.布的人分别有r,s,p个,他们相互碰到的概率相同,输的人死掉,问最终活下去的人是三种类型的概率 设状态dp(i,j,k)为还有i个石头,j个剪刀,k个布时的概率,dp(r,s,p ...