匿名方法和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)