对于拉姆达,许多文章都讲过原理及如何使用,所以这篇文章我主要是摘录我学习过的文字,总结下我自己的学习心得。

C#进阶之路(四):拉姆达

什么是拉姆达表达式

  "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"。Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。

       Lambda表达式Lambda表达式是由.NET 2.0演化而来的,也是LINQ的基础,熟练地掌握Lambda表达式能够快速地上手LINQ应用开发。

Lambda表达式在一定程度上就是匿名方法的另一种表现形式

//匿名方法 

IEnumerable<People> results = people.Where

(delegate(People p) { return p.age > 20; });

//拉姆达表达式

IEnumerable<People> results = people.Where(People => People.age > 20);

使用示例

(x, y) => x * y         //多参数,隐式类型=> 表达式 

x => x * 5              //单参数, 隐式类型=>表达式 

x => { return x * 5; }      //单参数,隐式类型=>语句块 

(int x) => x * 5            //单参数,显式类型=>表达式 

(int x) => { return x * 5; }      //单参数,显式类型=>语句块 

() => Console.WriteLine()   //无参数

以上述格式都是Lambda表达式的合法格式,在编写Lambda表达式时,可以忽略参数的类型,因为编译器能够根据上下文直接推断参数的类型。

Lambda的进阶用法

一、闭包

var a = 5;
Func<int,int> multiplyWith = x => x * a;
var result1 = multiplyWith(10); //50
a = 10;
var result2 = multiplyWith(10); //100

我们可以在Lambda表达式中用到外面的变量,没错,也就是传说中的闭包啦。

void DoSomeStuff()
{
    var coeff = 10;
    Func<int,int> compute = x => coeff * x;
    Action modifier = () =>
    {
        coeff = 5;
    };
    var result1 = DoMoreStuff(compute);
    ModifyStuff(modifier);
    var result2 = DoMoreStuff(compute);
}
int DoMoreStuff(Func<int,int> computer)
{
    return computer(5);
}
void ModifyStuff(Action modifier)
{
    modifier();
}
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-16
  • 2021-08-21
  • 2021-07-29
相关资源
相似解决方案