<返回更多

C#中的高级语法

2020-08-07    
加入收藏

前言:通过学习,然后分享自己学到的知识,仅仅只是为了更深一步的理解,希望各位童靴在看到文章能够给出你宝贵的意见;文章的编辑的确很烂,毕竟老师说过我语言水平很刺耳!

正文:什么是lambda表达式?

>lambda表达式其实就是一个用来代替委托实例的未命名方法;

>编译器会把lambda表达式转化为以下二者之一:

一个委托实例

一个表达式树(expression tree),类型是Expression(TDelegate),它表示了可遍历的对象模型中Lambda表达式里面的代码。它允许lambda表达式延迟到运行时再被解释。

|高级语法

首先我们写一个简单的语法快,如下下所示

C#中的高级语法,你会吗?

 

接下来我们使用=>将上述方法简化

C#中的高级语法,你会吗?

 

如上所示我们使用=>运算符隐式转化为方法的主体返回方法,最后解释为第一种写法;

上述栗子我们简单了解了一下lambda表达式的使用,接着我们一起来看看=>的更深的理解;

C#中的高级语法,你会吗?

 

lambda经常和委托一起使用,所以我们首先声明了一个委托类型,接着又声明了一个委托变量tra,tra后面的x就是委托类型的参数=>后面就是一个lambda表达式,最终我们将结果输出等于9。到这里我们不难看出lambda表达式的书写形式(参数)=>(表达式语句块),这里需要注意一点,如果只有一个参数并且类型可以推断的话,那么参数的小括号可以省略。

上面已经说了lambda表达式和委托一起使用,那怎么少的了Func和Action委托,废话不多说我们一起来看看下面的栗子。

C#中的高级语法,你会吗?

 

上面我们了声明了两个func委托,我们先来看第一个,这个func委托第一个int是参数,第二个int为返回类型,x为参数,x*x为表达式,最后我们输入结果为36。接着我们看第二个两个string表示两个参数,int为返回类型,前面我们刚刚说过一个参数..,那么参数后面的括号可以省略,所以第二个func委托需要添加括号,接着后面表达式语句块很好理解,直接看输入等于10,两个输出完全正确,看到这里各位小伙伴肯定对lambda有了更深的认识,实在没懂点个赞看着文章敲一遍就行啦!

说到这里有个小问题,开个玩笑,怎么会呢,我怎么会那么不要脸的求关注呢,就算没有我也会继续与大家共同学习下去。回到正题,有时候呢,lambda表达式有参数,但是呢这个参数推断不出来,这个时候就需要我们的显示指定lambda表达式的参数类型了,直接看例子,我觉得废话太多了

C#中的高级语法,你会吗?

错误,提示无法从中推断出...的类型

上面我们定义了两个泛型方法Foo和Bar,T是Foo这个泛型类型的参数,Action<T>是 Bar的类型参数,下面一个方法,我们想用lambda表达式调用Bar,这个时候lambda表达直接调用报错,所以我们用了以下两种方法显示的置定它的类型:

C#中的高级语法,你会吗?

 

欧克,这个时候显示正确,我为它置定了类型int,成功;这期就到这里结束,虽然说得知识很少,但码字太累了,下期会说一下,捕获外部变量和被捕获的变量,以及lambda表达式内的本地变量,感谢大家的观看,别忘了点个赞,或者有宝贵的意见请留在评论区我会一一回复,谢谢大家,下期再见!

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>