C# Lambda

Posted dewumu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# Lambda相关的知识,希望对你有一定的参考价值。

一、Lambda演变历史

Lambda 1.0 普通方法

技术图片
        private void DoNothing()
        
            Console.WriteLine("This is DoNothing");
        

        private void Study(int id, string name)
        
            Console.WriteLine($"id name 正在学习");
        
View Code

 声明委托      讲方法作为参数

技术图片
        public delegate void NoReturnNoPara();
        public delegate void NoReturnWithPara(int x, string y);//1 声明委托
        public delegate int WithReturnNoPara();
        public delegate string WithReturnWithPara(out int x, ref int y);
View Code
技术图片
           
                //.NetFramework1.0  1.1
                NoReturnNoPara method = new NoReturnNoPara(this.DoNothing);
            
View Code

2.0    出现了匿名方法  使用delegate关键字 声明

技术图片
            
                //.NetFramework2.0  匿名方法,delegate关键字
                //可以访问局部变量
                NoReturnWithPara method = new NoReturnWithPara(delegate (int id, string name)
                
                    Console.WriteLine(i);
                    Console.WriteLine($"id name 正在学习");
                );
                method.Invoke(1, "name");
            
2.0

3.0   去掉delegate关键字  将方法用=>连接

技术图片
            
                //.NetFramework3.0   把delegate关键字去掉,增加了一个箭头=>
                //lambda表达式  参数列表=>方法体
                NoReturnWithPara method = new NoReturnWithPara(
                    (int id, string name) =>
                
                    Console.WriteLine($"id name 正在学习");
                );
                method.Invoke(123, "aaa");
            
3.0

 方法的参数类型 可以由委托推算  因此可以省略参数类型

技术图片
           
                NoReturnWithPara method = new NoReturnWithPara(
                    (id, name) =>//省略参数类型,编译器的语法糖,虽然没写,编译时还是有的,根据委托推算
                    
                        Console.WriteLine($"id name 正在学习");
                    );
                method.Invoke(123, "bbb");
            
View Code

 进一步简化  当方法只有一行时,可以省略外层的大括号和分号     只有一个参数时可以省略方法的外层括号

技术图片
           
                NoReturnWithPara method = new NoReturnWithPara(
                    (id, name) => Console.WriteLine($"id name 正在学习"));
                //如果方法体只有一行,可以去掉大括号和分号
                method.Invoke(123, "ccc");
            
View Code

 委托也可以省略 编译器编译时会自动加上

技术图片
           
                NoReturnWithPara method = (id, name) => Console.WriteLine($"id name 正在学习");
                method.Invoke(123, "ddd"); //new NoReturnWithPara可以省掉,也是语法糖,编译器自动加上
            
View Code

 

以上是关于C# Lambda的主要内容,如果未能解决你的问题,请参考以下文章

Lamda表达式使用

lamda

Lambda表达式

Lamda表达式

LinqToSQL3

lambda及stream学习