日期:2014-05-20  浏览次数:20810 次

写给新接触linq的同学(二)lamda从零来理解


lamda表达式让很多新同学头疼,很多人问我到底是啥。

今天就写个博客给大家从零开始解释一下。(前提知识--委托)

            //委托变量
            Func<int, int, int> func = (a, b) => a + b;
            //计算2+3的值
            Console.WriteLine(func(2,3));
            Console.ReadKey();
输出:5

//其中
//(a, b) => a + b;
//这个lamda表达式等同于下面的方法
static int Add(int a,int b)
{
return a+b;
}

//说到这里的时候 ,群里的小盆友说他看懂了,所以我就继续往下说,稍稍深入一点。继续看下面的代码

    static void Main(string[] args)
        {
            //加法
            Func<int, int, int> func = (a, b) => a + b;
            //乘法
            Func<int, int, int> func1 = (a, b) => a * b;
            var result = Cal(func, 2, 3);
            var re = Cal(func1, 4, 6);
            Console.WriteLine("加法" + result);
            Console.WriteLine("乘法" + re);
            Console.ReadKey();
        }

        //计算 用委托作为参数传入,根据传入的委托来计算a和b,并返回结果。
        static int Cal(Func<int, int, int> func, int a, int b)
        {
            return func(a, b);
        }



//到了这一步就可以继续改写了。


  static void Main(string[] args)
        {

            var result = Cal((a, b) => a + b, 2, 3);//直接用lamda表达式
            var re = Cal((a, b) => a * b, 4, 6);//直接用lamda表达式

            Console.WriteLine("加法" + result);
            Console.WriteLine("乘法" + re);
            Console.ReadKey();
        }

        //计算 用委托作为参数传入,根据传入的委托来计算a和b,并返回结果。
        static int Cal(Func<int, int, int> func, int a, int b)
        {
            return func(a, b);
        }

//两个计算方式对比一下。可以知道,方法作为委托被传进了Cal方法内,然后被调用

//在linq中,运用的lamda表达式,原理跟这个是一样的。把委托传入linq的扩展方法内,在方法内部调用。