• 在线客服

  • 扫描二维码
    下载博学谷APP

  • 扫描二维码
    关注博学谷微信公众号

  • 意见反馈

原创 Lambda表达式和匿名方法有什么区别?

发布时间:2019-07-25 16:53:55 浏览 6045 来源:博学谷资讯 作者:照照

    Lambda表达式又称为拉姆达表达式。常常会有人搞不清,Lambda表达式和匿名方法有什么区别?其实,Lambda表达式和匿名方法没多大区别,它们根本就是一件事。要说唯一的区别就是:他们语法表现形式不同。Lambda 表达式是在语法方面的更进一步的进化,仅此而已。因此我们要了解Lambda表达式就应该同时也了解匿名方法。

     

    Lambda表达式和匿名方法区别

     

    下面先看一个简单的代码例子,分别用匿名方法和Lambda 表达式来实现对数组的搜索:

     

    使用 .net 2.0 的匿名方法来搜索字符串数组中包含 a 的字符串数组

     

    static void Main(string[] args)

     

    {

     

    string[] list = new string[] { "abc", "12", "java" };

     

    string[] ll = Array.FindAll(list,

     

    delegate(string s)

     

    {

     

    return s.IndexOf("a") >= 0;

     

    }

     

    );

     

    foreach (string var in ll)

     

    {

     

    Console.WriteLine(var);

     

    }

     

    Console.ReadLine();

     

    }

     

    使用 .net 3.5 的Lambda表达式来搜索字符串数组中包含 a 的字符串数组

     

    static void Main(string[] args)

     

    {

     

    string[] list = new string[] { "abc", "12", "java" };

     

    string[] ll = Array.FindAll(list, s => (s.IndexOf("a") >= 0));

     

    foreach (string var in ll)

     

    {

     

    Console.WriteLine(var);

     

    }

     

    Console.ReadLine();

     

    }

     

    从上述两个例子我们可以看出:

     

    从代码书写角度,代码可读性角度来说:Lambda表达式 比匿名方法更简单了。

     

    而 Lambda表达式 和 匿名方法都是干的同一件事情,让我们少写一个函数定义。函数的调用和函数的实现在一起完成了。

     

    Lambda表达式的书写格式如下:

     

    (参数列表) => 表达式或者语句块

     

    其中:

     

    参数个数:可以有多个参数,一个参数,或者无参数。

     

    参数类型:可以隐式或者显式定义。

     

    表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体)。

     

    一些Lambda表达式的书写范例:

     

    有两个参数的 Lambda表达式例子:

     

    注:别看比较复杂,LINQ中实际把 下述代码中的 delegate ,DoSomeThing 替你做了,所以你写代码的时候只需要写

     

    vart = DoSomeThing(7, 8, (x, y) => x * y); 这么一行。

     

    public delegate T HongJunGuoTest01(T t1, T t2);

     

    class Program

     

    {

     

    private static T DoSomeThing(T t1,T t2,HongJunGuoTest01 match)

     

    {

     

    return match(t1, t2);

     

    }

     

    static void Main(string[] args)

     

    {

     

    var t = DoSomeThing(7, 8, (x, y) => x * y);

     

    Console.WriteLine(t);

     

    Console.ReadLine();

     

    }

     

    }

     

    下面这些写法也是对的(你只需要修改Main函数中的代码,其他地方不需要动):

     

    var t = DoSomeThing(7, 8, (int x, int y) => x * y);

     

    var t = DoSomeThing("7", "8", ( x, y) => x + y);

     

    或者我们写一个更复杂的: => 右边是一段语句块。

     

    var t = DoSomeThing(7, 8, (x, y) => { if (x < 5) { return (x + 8) * y; } else { return y; } });

     

    最前面的例子是一个参数的例子,我们就不举一个参数的例子了,下面举一个没有参数的例子:

     

    public delegate void HongJunGuoTest02();

     

    class Program

     

    {

     

    private static void DoSomeThing(HongJunGuoTest02 match)

     

    {

     

    match();

     

    }

     

    static void Main(string[] args)

     

    {

     

    DoSomeThing(() => Console.WriteLine("jajaja"));

     

    Console.ReadLine();

     

    }

     

    }

     

    以上就是Lambda表达式和匿名方法的区别。简单来说,匿名方法,Lambda表达式 都是函数式编程思想下的产物,Lambda表达式这个概念本身就是函数式编程的基础,而函数式编程就是基于lambda演算的理论建立起来的。讲到这,可能还会有小伙伴会有疑问,建议大家到博学谷官网进行学习,上面有海量的免费学习资料哦!

    申请免费试学名额    

在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!

上一篇: 五种常见的分布式ID,三分钟速览 下一篇: 嵌入式工程师需要掌握什么?技能总结

相关推荐 更多

热门文章

  • 前端是什么
  • 前端开发的工作职责
  • 前端开发需要会什么?先掌握这三大核心关键技术
  • 前端开发的工作方向有哪些?
  • 简历加分-4步写出HR想要的简历
  • 程序员如何突击面试?两大招带你拿下面试官
  • 程序员面试技巧
  • 架构师的厉害之处竟然是这……
  • 架构师书籍推荐
  • 懂了这些,才能成为架构师
  • 查看更多

扫描二维码,了解更多信息

博学谷二维码