在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
Lambda表达式又称为拉姆达表达式。常常会有人搞不清,Lambda表达式和匿名方法有什么区别?其实,Lambda表达式和匿名方法没多大区别,它们根本就是一件事。要说唯一的区别就是:他们语法表现形式不同。Lambda 表达式是在语法方面的更进一步的进化,仅此而已。因此我们要了解Lambda表达式就应该同时也了解匿名方法。

下面先看一个简单的代码例子,分别用匿名方法和Lambda 表达式来实现对数组的搜索:
使用 .net 2.0 的匿名方法来搜索字符串数组中包含 a 的字符串数组
static void Main(string[] args)
{
string[] list = new string[] { "abc", "12", "java" };
string[] ll = Array.FindAll(list,
delegate(string s)
{
return s.IndexOf("a") >= 0;
}
);
foreach (string var in ll)
{
Console.WriteLine(var);
}
Console.ReadLine();
}
使用 .net 3.5 的Lambda表达式来搜索字符串数组中包含 a 的字符串数组
static void Main(string[] args)
{
string[] list = new string[] { "abc", "12", "java" };
string[] ll = Array.FindAll(list, s => (s.IndexOf("a") >= 0));
foreach (string var in ll)
{
Console.WriteLine(var);
}
Console.ReadLine();
}
从上述两个例子我们可以看出:
从代码书写角度,代码可读性角度来说:Lambda表达式 比匿名方法更简单了。
而 Lambda表达式 和 匿名方法都是干的同一件事情,让我们少写一个函数定义。函数的调用和函数的实现在一起完成了。
Lambda表达式的书写格式如下:
(参数列表) => 表达式或者语句块
其中:
参数个数:可以有多个参数,一个参数,或者无参数。
参数类型:可以隐式或者显式定义。
表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体)。
一些Lambda表达式的书写范例:
有两个参数的 Lambda表达式例子:
注:别看比较复杂,LINQ中实际把 下述代码中的 delegate ,DoSomeThing 替你做了,所以你写代码的时候只需要写
vart = DoSomeThing(7, 8, (x, y) => x * y); 这么一行。
public delegate T HongJunGuoTest01(T t1, T t2);
class Program
{
private static T DoSomeThing(T t1,T t2,HongJunGuoTest01 match)
{
return match(t1, t2);
}
static void Main(string[] args)
{
var t = DoSomeThing(7, 8, (x, y) => x * y);
Console.WriteLine(t);
Console.ReadLine();
}
}
下面这些写法也是对的(你只需要修改Main函数中的代码,其他地方不需要动):
var t = DoSomeThing(7, 8, (int x, int y) => x * y);
var t = DoSomeThing("7", "8", ( x, y) => x + y);
或者我们写一个更复杂的: => 右边是一段语句块。
var t = DoSomeThing(7, 8, (x, y) => { if (x < 5) { return (x + 8) * y; } else { return y; } });
最前面的例子是一个参数的例子,我们就不举一个参数的例子了,下面举一个没有参数的例子:
public delegate void HongJunGuoTest02();
class Program
{
private static void DoSomeThing(HongJunGuoTest02 match)
{
match();
}
static void Main(string[] args)
{
DoSomeThing(() => Console.WriteLine("jajaja"));
Console.ReadLine();
}
}
以上就是Lambda表达式和匿名方法的区别。简单来说,匿名方法,Lambda表达式 都是函数式编程思想下的产物,Lambda表达式这个概念本身就是函数式编程的基础,而函数式编程就是基于lambda演算的理论建立起来的。讲到这,可能还会有小伙伴会有疑问,建议大家到博学谷官网进行学习,上面有海量的免费学习资料哦!
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
学Linux运维可以从事哪些工作?就业前景好吗?
学Linux运维可以从事哪些工作?就业前景好吗?因为入门门槛低,很多小伙伴在大学毕业或者刚刚接触工作的时候就转行到Linux运维学习中。但是有部分同学却不明白到底学习了Linux运维之后可以做哪些工作。今天博学谷小编就可以大家一起了解一下,学习Linux运维可以从事哪些工作。
14724
2019-08-08 14:08:34
Linux和Ubuntu是什么关系?两者有区别吗?
Linux和Ubuntu是什么关系?两者有区别吗?对于不了解Linux的朋友来说,可能会说“我使用的是Linux操作系统”。其实Linux这个词本身指标是Linux内核。一般说的Linux系统其实是基于Linux内核的操作系统。而Ubuntu就是以Linux为内核的操作系统之一。
17302
2019-08-08 14:18:06
嵌入式培训后好就业吗?薪资大概多少?
嵌入式开发一直都是市场人才的集结地。很多同学都明确现在嵌入式的就业前景比较好,但是在参加培训的时候总是会由于,现在嵌入式培训后好就业吗?现在的薪资是多少?会不会市场饱和了?其实这些问题大家不要过多的担心。首先整体环境事件来看嵌入式开发人才持续居高不下,对于简单的3-5个月的培训来说,不会有过于明显的市场变化。其次对于互联网而言,技术是安身立命的根本,真正掌握嵌入式开发技术,不愁找不到好的工作。
9269
2019-07-08 17:53:32
2019年Linux运维面试题汇总
转眼又到秋招的时候,本文为大家汇总了2019年最新Linux运维面试题,希望能够帮助大家通过面试官的提问。每一个问题都是精华,大家一定要仔仔细细过一遍,第一遍看的时候可以先不看参考答案,检查一下运维方面的知识点是不是都掌握了。
9939
2019-08-28 19:58:33
Linux性能优化可以从哪些方面入手?
Linux性能优化一直都是老生常谈的话题,相信大家对于优化的措施多多少少都有一定的了解。但是如何进行Linux性能调优,又从哪些方面入手,这背后的深层原理是什么,为什么要这么操作,却很少有人讲得清楚。下面本文详细为大家分析一下影响Linux性能的三大因素系统硬件、操作系统和操作系统,大家可以从这些思路上得到优化的具体方案。
7634
2020-03-16 12:03:17
