欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lambda表达式

程序员文章站 2022-05-22 21:18:45
...

Lambda表达式

介绍

Lambda表达式是一种可用于创建委托表达式目录树类型的匿名函数。通过使用Lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。Lambda表达式对于编写LINQ查询表达式特别有用。
说白了,Lambda就是匿名函数的一种简写方式。

用法

在一个简单委托中使用

下面我将用3种方法来实现委托:

    class Program
    {
        public delegate int Sum(int a,int b);
        static void Main(string[] args)
        {
            //Lambda表达式
            Sum sum1 = (a, b) => a + b;
            //匿名函数
            Sum sum2 = delegate(int aa, int bb)
            {
                return aa + bb;
            };
            //普通委托
            Sum sum3 = caculateSum;
            int aaa = 1;
            int bbb = 2;
            Console.WriteLine("Lambda的结果:{0}", sum1(aaa, bbb));
            Console.WriteLine("匿名函数的结果:{0}", sum2(aaa, bbb));
            Console.WriteLine("普通委托的结果:{0}", sum3(aaa, bbb));
            Console.Read();
        }

        static int caculateSum(int a, int b)
        {
            return a + b;
        }
    }

在上面的代码中:
sum1是通过Lambda表达式初始化了一个委托实例;
sum2是通过匿名函数初始化了一个委托实例;
sum3是通过一个静态方法来初始化一个委托实例;
这3种方式其实表达的意思都是一样的,都将返回a+b的值,但是我们可以看到,使用Lambda表达式仅仅使用了一行代码。

在扩展方法中的使用

下面将用一个简单的扩展方法展示如何在扩展方法中使用Lambda:

List<int> ls = new List<int>()
            {
                1,2,3,4,5,6
            };

            int result=ls.Sum(a => { return (a > 3 ? a : 0); });
            Console.WriteLine(result);
            Console.Read();

运行上面的代码,将发现返回值为15,也就是说返回的是大于3的几个值的和,即4+5+6。其实这里本质上也是一个委托,只是这个扩展方法的参数是一个委托。
这里将扩展方法单独拿出来说的目的是因为,继承自Enumerable的很多类在Linq中都有很多扩展方法,这些扩展方法很多参数都有委托类型,而在调用这些扩展方法时,使用Lambda表达式的方法将会使代码变得更加精减,不过这在理解上就不是那么容易了,但是如果对Lambda表达式有所了解,这将会很清楚的理解。

Lambda表达式的语法

一般写法:

(parm1,parm2...,parmn)=>{
    //代码块
}

特殊情况:
当参数只有1个的时候,可以省略括号

parm1=>{
    //代码块
}

当函数的语句只有1个时,也可以省略大括号,但是省略后就不能加return,如果不省略就必须按标准的代码块来写。例如下面直接返回所有参数的和:

(parm1,parm2...,parmn)=>parm1+parm2+...+parmn

总结

Lambda表达式最大的有点就是简化了coding和增加了类型安全,本质上Lambda表达式就是一个匿名函数,在编译的时候,编译器将会自动将Lambda表达式转换成匿名函数。如下图:
Lambda表达式

相关标签: lambda