韶关企业网站建设,通信公司网站建设,怎么建设一个优秀的网站,室内设计3d模型素材网站简介Lambda 是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用 lambda 表达式#xff0c;可以写入可作为参数传递或作为函数调用值返回的本地函数#xff01;场景比如有这样一个场景#xff0c;在给出的List集合中找出数字大于等于18的数字#xff0c;假如我们不… 简介Lambda 是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用 lambda 表达式可以写入可作为参数传递或作为函数调用值返回的本地函数场景比如有这样一个场景在给出的List集合中找出数字大于等于18的数字假如我们不知道有linq这种东西Listint lstAges new Listint { 16,17,18,19,20 };我们预定义了一个输出年龄的方法void OutPutAge(Funcint,bool func){foreach (var item in lstAges){if (func(item)){Console.WriteLine(item);}}}可以看出方法接收一个委托该委托接收一个int类型的参数并返回bool那么我们首先会定义一个方法当年龄大于18的时候我们返回truebool IsAgeScrren(int age){return age 18;}使用OutPutAge(IsAgeScrren);比如说我们现在知道这个方法仅仅传递一个方法的引用我们很确定这个方法只会调用这一次单独为它创建一个方法感觉有些浪费但是又必须用到这个方法但是思考半天想不出该给这个方法取什么名字。这个时候Lambda就派上用场了那么我们可以先简化成匿名方法OutPutAge(delegate (int age) { return age 18; });现在我们把delegate关键字删掉在参数列表和方法体之间使用箭头符号连接这就形成了Lambda表达式OutPutAge( (int age) { return age 18; });在函数式的编程语言中如果最后一句是return表达式的话我们最后可以把return和{}这个关键字省掉OutPutAge( (int age) ( age 18));c#也有类型推断功能我们在前面的 foreach (var item in lstAges)这里c#可以自动推断出 age是int类型所以我们也可以把int类型直接省掉就变成了这样看起来是不是就和我们平常的lambda表达式一样了OutPutAge( age age 18);那么我们再回到头来看如果我们知道Linq语句中的where方法其实帮我们做了很多事Listint lstAges new Listint { 16,17,18,19,20 };lstAges.Where(o o 18)我们再看一下Where的定义public static IEnumerableTSource WhereTSource(this IEnumerableTSource source, FuncTSource, bool predicate){throw null;}他是使用了扩展方法和委托来完成的source是 源元素的类型predicate是接收一个int类型的参数并返回bool变量。最后通过刚才的例子讲解也很容易推断出Where源码和我们预定义的方法差也差不多的public static IEnumerableTSource WhereTSource(this IEnumerableTSource source, FuncTSource, bool predicate){if (source null)throw new Exception(数据源为空);foreach (var item in source){if (predicate(item) ){yield return item;}}}最后大家如果喜欢我的文章还麻烦给个关注, 希望net生态圈越来越好