Lambda表达式 早在C#1.0时,C#中就引入了委托(delegate)类型的概念。通过使用这个类型,我们可以将函数作为参数进行传递。在某种意义上,委托可理解为一种托管的强类型的函数指针。 通常情况下,使用委托来传递函数需要一定的步骤: 定义一个委托,包含指定的参数类型和返回值类型。 在需要接收函数参数的方法中,使用该委托类型定义方法的参数签名。 为指定的被传递的函数创建一个委托实例。 可能这听起来有些复杂,不过本质上说确实是这样。上面的第3步通常不是必须的,C#编译器能够完成这个步骤,但步骤1和2仍然是必须的。 幸运的是,在C#2.0中引入了泛型。现在我们能够编写泛型类、泛型方法和最重要的:泛型委托。尽管如此,直到.NET3.5,微软才意识到实际上仅通过两种泛型委托就可以满足99%的需求: Action:无输入参数,无返回值 Action:支持1-16个输入参数,无返回值 Func:支持1-16个输入参数,有返回值 Action委托返回void类型,Func委托返回指定类型的值。通过使用这两种委托,在绝大多数情况下,上述的步骤1可以省略了。但是步骤2仍然是必需的,但仅是需要使用Action和Func。 那么,如果我只是想执行一些代码该怎么办?在C#2.0中提供了一种方式,创建匿名函数。但可惜的是,这种语法并没有流行起来。下面是一个简单的匿名函数的示例: Funcdouble,doublesquare=delegate(doublex){returnx*x;}; 为了改进这些语法,在.NET3.5框架和C#3.0中引入了Lambda表达式。 首先我们先了解下Lambda表达式名字的由来。实际上这个名字来自微积分数学中的λ,其涵义是声明为了表达一个函数具体需要什么。更确切的说,它描述了一个数学逻辑系统,通过变量结合和替换来表达计算。所以,基本上我们有0-n个输入参数和一个返回值。而在编程语言中,我们也提供了无返回值的void支持。 让我们来看一些Lambda表达式的示例: //The治疗白癜风的专科医院北京白癜风治疗最好医院
|