概述

   Lambda 表达式的本质就是匿名函数。(而匿名方法的本质是委托

   “Lambda 表达式”是一个匿名函数,可以包含表达式和语句,并且可用于创建委托或表达式树类型。 (Lambda 表达式的运算符为 =>,读作“goes to”。=> 运算符具有与赋值运算符(=)相同的优先级)

  Lambda 的基本形式是:

    (input parameters) => expression

    只有在 Lambda 有一个输入参数时,括号才是可选的,否则括号是必需的。

    两个或更多输入参数由括在括号中的逗号分隔: (x, y) => x==y 。

  有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示的方式显式指定类型:

    (int x, string s) => s.Length > x

  使用空括号指定零个输入参数:

    () => SomeMethod()

  最常用的场景是 IEnumerable 和 IQueryable 接口的 Where(c => c.Id > 3)

下列规则适用于 Lambda 表达式中的变量范围:

    捕获的变量将不会被作为垃圾回收,直至引用变量的委托超出范围为止。

    在外部方法中看不到 Lambda 表达式内引入的变量。

    Lambda 表达式无法从封闭方法中直接捕获 ref 或 out 参数。

    Lambda 表达式中的返回语句不会导致封闭方法返回。

    Lambda 表达式不能包含其目标位于所包含匿名函数主体外部或内部的 goto 语句、break 语句或 continue 语句。

Lambda 表达式缩写推演

            new Func<string, int>(delegate (string str) { return str.Length; });
delegate (string str) { return str.Length; }    //匿名方法
(string str) => { return str.Length; }   //Lambda语句
(string str) => str.Length          //Lambda表达式
(str) => str.Length        //让编译器推断参数类型
str => str.Length        //去掉不必要的括号

应用实例

  一、

    delegate int AddDel(int a, int b);      //定义一个委托(与类同级)

        #region
        AddDel fun = delegate (int a, int b) { return a + b; }; //匿名函数
        AddDel funLambda = (a, b) => a + b; //lambda本质就是匿名函数(lambda参数类型可以进行隐式推断,可以省略类型)
        //Console.WriteLine(fun(1, 3));         List<string> strs = new List<string>() { "", "", "" };
        var temp = strs.FindAll(s => int.Parse(s) > );         foreach(var item in temp)
        {
          Console.WriteLine(item);
        }
        //Console.WriteLine(funLambda(1, 3));
        #endregion

  二、

        static bool GetEvenNum(int num)
{
if(num % == )
{
return true;
}
return false;
} List<int> nums = new List<int>() { , , , , , , }; //使用委托方式
List<int> evenNums = nums.FindAll(GetEvenNum);
foreach(var item in evenNums)
{
Console.WriteLine(item);
} Console.WriteLine("使用 lambda 的方式");
List<int> evenNumLambda = nums.FindAll(n => n % == );
foreach (var item in evenNumLambda)
{
Console.WriteLine(item);
}
Console.ReadKey();

最新文章

  1. WP-Cumulus插件
  2. lodash 替换 underscore
  3. VS编程中找不到Microsoft.Office.Core、Microsoft.Office.Interop.Word和VBIDE
  4. BlueDroid介绍
  5. 开发资源列表【Worldsing分享】
  6. WCF 学习总结3 -- 实例模式
  7. DevExpress 控件 GridControl常见用法
  8. 一种实现C++反射功能的想法(二)
  9. oracle execute immediate
  10. mysql位_01检查错误代码的方法
  11. linux文件系统命令
  12. 零开始:NetCore项目权限管理系统:定义基本接口和实现
  13. Chapter 5 Blood Type——24
  14. Java的运行原理(转载)
  15. 学习笔记之Python最简编码规范
  16. JavaScript事件模拟元素拖动
  17. 动态规划-最长可互除子序列 Largest Divisible Subset
  18. Hadoop学习之路(一)理论基础和逻辑思维
  19. P1437 [HNOI2004]敲砖块
  20. 3-1 实现简单的shell sed替换功能

热门文章

  1. 【BZOJ】4011: [HNOI2015]落忆枫音
  2. mybatis理解(0)
  3. WSL(Windows Subsystem for Linux) 适用于Linux的Windows子系统
  4. python获取子进程的返回值
  5. 牛客OI周赛4-提高组 B 最后的晚餐(dinner)
  6. Codeforces 937D - Sleepy Game
  7. Mac python 环境配置
  8. 第 7 章 多主机管理 - 047 - 管理 Machine
  9. JavaScript学习第一天(一)
  10. 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据