匿名方法与lambda表达式

匿名方法,从字面上理解即是没有名字的的方法。用delegate关键字进行声明且只能赋值给一个委托

for example1

static void Main(string[] args){
  Fun<int,int,int> plus =delegate(int arg1,int arg2)
{
   return arg1+arg2
}
}

ps:经常用作回调

从c#3.0后又开始使用Lambda表达式来代替匿名函数,只要在有委托参数类型的地方就可以使用lambda表达式比如example1

static void Main(string[] args){
  Fun<int,int,int> plus =( arg1, arg2)=>//委托已经声明了参数类型,别忘记“=>”这个符号
{
   return arg1+arg2
}
}
ps:


Func<int, int> test2 = a => a+1;//lambda表示的参数只有一个的时候,

//可以不加上括号 当函数体的语句只有一句的时候,我们可以不加上大括号 也可以不加上return语句


值得注意的是通过Lambda表达式可以访问Lambda表达式块外部的变量。这是一个非常好的功能,但如果不能正确使用,也会非常危险。示例:

int somVal = 5;
Func<int,int> f = x=>x+somVal;
Console.WriteLine(f(3));//8
somVal = 7;
Console.WriteLine(f(3));//10

这个方法的结果,不但受到参数的控制,还受到somVal变量的控制,结果不可控,容易出现编程问题,用的时候要谨慎。

原文地址:https://www.cnblogs.com/jiangxiaoming/p/13088156.html