介绍  

Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 ,但是比匿名函数更简洁。

通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。

Lambda表达式本身可划分为两种类型:语句Lambda和表达式Lambda

若要创建 Lambda 表达式,需要在 Lambda 运算符 => (goes to)左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。

格式

(input parameters) => expression

或者 

(input parameters) => {statement;}

左边参数列表可以有多个参数,一个参数,或者无参数;参数类型可以隐式或者显式,参数类型可以忽略,因为可以根据使用的上下文进行推断而得到。

仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。

例如:
                (x, y) => x * y                              //多参数,隐式类型=> 表达式
                x => x * 10                                  //单参数,隐式类型=>表达式
                x => { return x * 10; }                   //单参数,隐式类型=>语句块
                (int x) => x * 10                            //单参数,显式类型=>表达式
                (int x) => { return x * 10; }            //单参数,显式类型=>语句块
                () => Console.WriteLine()                //无参数

例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值。 

Lambda表达式与委托类型

如下面的示例所示,你可以将此表达式分配给委托类型:

delegate int del(int i); 
static void Main(string[] args) 
{ 
    del myDelegate = x => x * x; 
    int j = myDelegate(5); //j = 25 
}

=> 运算符具有与赋值运算符 (=) 相同的优先级并且是右结合运算

使用 Lambda 表达式创建该委托最为方便

 Lambda表达式可以被转成委托类型,但必须满足以下几点: 
        1.两者参数个数相同 
        2.参数类型相同,注意隐式类型要参与类型辨析 
        3.委托的返回类型要与Lambda的相同,不论是表达式还是语句块

Lambda与匿名函数的对比:

C# Lambda与表达式树
public delegate int DelegateTest(int n1, int n2);
        static void Main(string[] args)
        {
            //委托:方法作为参数传递
            var r1 = Result(3, 4, Sum);  
            //使用匿名方法传递委托
            var r4 = Result(3,4,delegate(int x,int y){return x+y;});
            //语句lambda传递委托
            var r2 = Result(3, 4, (a, b) => { return a - b; }); 
            //lambda传递委托
            var r3 = Result(3, 4, (a, b) => a * b); 
            Console.ReadLine();
        }
        public static int Result(int a, int b, DelegateTest @delegate)
        {
            return @delegate(a, b);
        }
        public static int Sum(int a, int b)
        {
            return a + b;
        }
View Code

相关文章:

  • 2021-09-29
  • 2022-02-27
猜你喜欢
  • 2021-04-29
  • 2022-12-23
  • 2022-01-23
  • 2021-10-09
  • 2022-12-23
  • 2022-02-24
  • 2021-11-29
相关资源
相似解决方案