码迷,mamicode.com
首页 > 其他好文 > 详细

匿名方法和Lambda表达式

时间:2015-01-04 14:54:25      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

匿名方法:
匿名方法是在初始化委托时内联(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表达式

标签:

原文地址:http://www.cnblogs.com/leijiangtao/p/4200989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!