lambda表达式也被称为匿名函数,何为匿名函数?
匿名没有真实名字,当然在C#中就是没有函数名了,C#里有两种匿名函数的写法,一种是早期推出的匿名函数,而另一种就是拉姆达(lambda)表达式了,那么这两种有什么不同,分别怎么用的,下面介绍一下.
我个人觉得吧,在写代码的过程中,给函数 字段命名的时候名字总是要想很久,甚至有时候不知道用什么名字好,所以可能是MS明白了这部分人的感受所以推出匿名吧.也不用想名字(一顿胡乱分析).
匿名函数(需用到委托):
有这样一段代码(求两个数的和,普通写法):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
delegate int MyDelegate(int a, int b);
static void Main(string[] args)
{
MyDelegate md = add;
int sum = md(1,2);
Console.WriteLine(sum);
}
static int add(int a, int b)
{
return a + b;
}
}
}
匿名函数的写法:
namespace ConsoleApplication1
{
class Program
{
delegate int MyDelegate(int a, int b);
static void Main(string[] args)
{
MyDelegate md = delegate(int a, int b) { return a + b; };
int sum = md(1,2);
Console.WriteLine(sum);
}
}
}
这样写的好处是 意思简洁明了,且不用重新写一个函数,(如果说函数内部很复杂建议不要用匿名函数)
匿名函数的格式: delegate(参数列表){ //方法体 };
lambda表达式(又称匿名函数):
lambda是个名字.但是表达式需要注意,表达式!!不是函数,也就是说和函数没啥关系,是匿名函数的一个进化版,所以又称为匿名函数.
我们看一看他的写法:
namespace ConsoleApplication1
{
class Program
{
delegate int MyDelegate(int a, int b);
static void Main(string[] args)
{
MyDelegate md = (a,b)=>{return a+b;};
int sum = md(1, 2);
Console.WriteLine(sum);
}
}
}
比匿名函数更为简洁,连数据类型都不用写
labmda表达式的语法:(参数列表 ,可以省略类型名,如果只有一个参数 括号也可以省略){//方法体};
总结:
优点:
代码短小的时候可读性好
能使用函数内部的定义的变量,而无需定义的全局或者传值
编辑性能好
缺点:
内部代码不宜过长,会导致读取困难
当这玩意嵌套的时候........扎心了老铁..
就和正则表达式一样,虽然好用,但是不宜过长,不然很难读取.