【C#】【转】你通晓C#中的兰姆(Lamb)da表明式的演变过程吗?

【转】你知道C#中的兰姆(Lamb)da表明式的衍生和变化过程吗?

这得从很久很久从前说起了,记得非常时候…

迷迷糊糊的记得在此以前有个叫委托的事物是那么的高深难懂。

寄托的使用

例一:

C# 1

怎么是信托?

村办精晓:用来传递方式的体系。(用来传递数字的品类有int、float、double,用来传递格局的就有嘱托

例二:

C# 2

又经过了很久很久…

匿名情势

诸多时候委托接收的章程是两次性的要么方法体是分外简单的…

例三:

C# 3

俺们可以写成:

C# 4

有没有觉察我们每趟都要定义委托,很多时候签名可能是同一的。这样就从不必要定义再一次的。

接下来又过了很久很久…

Func和Action

莫不这么些也觉得我们每一回定义委托有点傻,所以干脆在框架内四次定义好所有可能用到的寄托。这变幻的形式签名怎么可能定义得全?没关系,定义成泛型的不就可以了呢。

先说Func:

C# 5

细心的意中人或者看到了,Func相对于AddDelegate多定义了一个int。多出了的非常是指的是回去类型。我们F12看对应的概念:

C# 6

关于地方Func的写法大家得以简写成:(语法糖而已,编译后要么注释的代码

C# 7

再看Action:

C# 8

擢升:将来只要我们写代码的时候假诺写到到delegate…,你要立时想到是否可以用Func或者Action来顶替吗?C#4中的Action和Func有16个参数,充分你用了。

大家等了又等,又过了好久好久…

Lambda的诞生

C# 9

自家XX,这TM就是亲兄弟啊。直接去掉delegate关键字,然后加一个=>就成了lambda表明式了。(=>读作goes to

咱俩后续简化:

C# 10

抛开参数类型也是可以的,因为强大的VS能够按照泛型委托Func自己臆度出来参数类型。

还足以简化吗?当然:

C# 11

return关键字也决不了,大括号也决不了。(自然,方法体惟有单条语句才能怎么办C#,)

现在看起来已经特别接近大家通常用的兰姆da表达式了。

假若传入参数只有一个的话,我们还足以继续简化:

C# 12

那就是我们一贯见得最多的lambda长相了。

要长大这样也是有要求的:

  1. 只能有一个流传参数
  2. 方法体只好只一条语句。

至于第1点,lambda我们一向用得较多的是依照IEnumerable或IQueryable,所以只能有一个参数也就知足了。

至于第2点,我们选拔扩大方法的链式编程来化解。

如:(用链式来缓解第二点)

C# 13

然后,大家过上了甜蜜的生活…

 

借《深切了然C#》中的一图:

C# 14

 

小知识:(异步Lambda)

Func<Student, Task<bool>> func = async t =>
{
    await Task.Delay(100);//等待100毫秒
    return false;
};

 

结束:

本文简短的说了下lambda表达式在C#中的一步步衍生和变化。说的不自然对,轻拍!

本文以协同至《C#基础知识巩固体系

相关文章