首页 > 代码库 > 匿名方法和Lambda表达式

匿名方法和Lambda表达式

匿名方法:匿名方法是在初始化委托时内联(inline)声明的方法。使用匿名方法1.声明委托变量时作为初始化表达式。2.组合委托时在赋值语句的右边。3.为委托增加事件。匿名方法的语法1.delegate 类型的关键字2.参数列表,若果语句块没有使用任何参数则可以省略3.语句块,他包含匿名方法的代码delegate (parameters){implementationcode} 关键字 参数列表 语句块Lambda表达式可以代替匿名方法。把匿名方法转换为Lambda表达式:1.删除delegate关键字;2.在参数列表和匿名方法主体之间放Lambda表达式=>.Mydel del=delegate(int x){return x+1;};//匿名方法***注意后面的分号****Mydel del=(int x)=>{return x+1;};//Lambda表达式语法:(参数,参数)=>{语句或表达式}()=>{语句或表达式}......等格式编译器还可以从委托的声明中知道委托参数的类型,因此Lambda表达式允许我们省略类型参数。带有类型的参数列表称为显示类型。省略类型的参数列表称为隐式类型。如果只有一个隐式类型的参数,我们可以省略周围的圆括号。Mydel del=delegate(int x){return x+1;};//匿名方法Mydel del=(int x)=>{return x+1;};//Lambda表达式Mydel del=(x)=>{return x+1;};//Lambda表达式Mydel del=x=>{return x+1;};//Lambda表达式Mydel del=x=>x+1;//Lambda表达式Lambda表达式的参数列表要注意以下几点Lambda表达式的参数列表中的参数必须在参数数量,类型和位置上与委托相匹配。表达式的参数列表中的参数不一定需要包含类型(隐式类型),除非委托有ref或out参数--此时必须注明类型(显示类型)如果没有参数,必须使用一组空的圆括号。//命名方法namespace ConsoleApplication1{    class Program    {        public static int add20(int x)        { return x + 20; }        delegate int otherdel(int para);//声明在类的内部        static void Main(string[] args)        {            otherdel del = add20;            Console.WriteLine("{0}",del(5));            Console.WriteLine("{0}", del(6));            Console.ReadLine();        }    }}//匿名方法using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        delegate int otherdel(int para);//声明在类的内部        static void Main(string[] args)        {            otherdel del = delegate(int x)            {                return x + 20;    //返回一个整形值,和委托返回类型保持一致            };//记得这儿要加分号            if (del != null)            {                Console.WriteLine("{0}", del(5));                Console.WriteLine("{0}", del(6));            }            Console.ReadLine();        }    }}//Lambda表达式namespace ConsoleApplication1{    class Program    {        delegate int otherdel(int para);//声明在类的内部        static void Main(string[] args)        {            otherdel del = (x) => { return x + 1; };               if (del != null)            {                Console.WriteLine("{0}", del(5));                Console.WriteLine("{0}", del(6));            }            Console.ReadLine();        }    }}

 

匿名方法和Lambda表达式