前言:通过学习,然后分享自己学到的知识,仅仅只是为了更深一步的理解,希望各位童靴在看到文章能够给出你宝贵的意见;文章的编辑的确很烂,毕竟老师说过我语言水平很刺耳!
正文:什么是lambda表达式?
>lambda表达式其实就是一个用来代替委托实例的未命名方法;
>编译器会把lambda表达式转化为以下二者之一:
一个委托实例
一个表达式树(expression tree),类型是Expression(TDelegate),它表示了可遍历的对象模型中Lambda表达式里面的代码。它允许lambda表达式延迟到运行时再被解释。
|高级语法
首先我们写一个简单的语法快,如下下所示
接下来我们使用=>将上述方法简化
如上所示我们使用=>运算符隐式转化为方法的主体返回方法,最后解释为第一种写法;
上述栗子我们简单了解了一下lambda表达式的使用,接着我们一起来看看=>的更深的理解;
lambda经常和委托一起使用,所以我们首先声明了一个委托类型,接着又声明了一个委托变量tra,tra后面的x就是委托类型的参数,=>后面就是一个lambda表达式,最终我们将结果输出等于9。到这里我们不难看出lambda表达式的书写形式(参数)=>(表达式语句块),这里需要注意一点,如果只有一个参数并且类型可以推断的话,那么参数的小括号可以省略。
上面已经说了lambda表达式和委托一起使用,那怎么少的了Func和Action委托,废话不多说我们一起来看看下面的栗子。
上面我们了声明了两个func委托,我们先来看第一个,这个func委托第一个int是参数,第二个int为返回类型,x为参数,x*x为表达式,最后我们输入结果为36。接着我们看第二个两个string表示两个参数,int为返回类型,前面我们刚刚说过一个参数..,那么参数后面的括号可以省略,所以第二个func委托需要添加括号,接着后面表达式语句块很好理解,直接看输入等于10,两个输出完全正确,看到这里各位小伙伴肯定对lambda有了更深的认识,实在没懂点个赞看着文章敲一遍就行啦!
说到这里有个小问题,开个玩笑,怎么会呢,我怎么会那么不要脸的求关注呢,就算没有我也会继续与大家共同学习下去。回到正题,有时候呢,lambda表达式有参数,但是呢这个参数推断不出来,这个时候就需要我们的显示指定lambda表达式的参数类型了,直接看例子,我觉得废话太多了
错误,提示无法从中推断出...的类型
上面我们定义了两个泛型方法Foo和Bar,T是Foo这个泛型类型的参数,Action<T>是 Bar的类型参数,下面一个方法,我们想用lambda表达式调用Bar,这个时候lambda表达直接调用报错,所以我们用了以下两种方法显示的置定它的类型:
欧克,这个时候显示正确,我为它置定了类型int,成功;这期就到这里结束,虽然说得知识很少,但码字太累了,下期会说一下,捕获外部变量和被捕获的变量,以及lambda表达式内的本地变量,感谢大家的观看,别忘了点个赞,或者有宝贵的意见请留在评论区我会一一回复,谢谢大家,下期再见!