匿名方法与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变量的控制,结果不可控,容易出现编程问题,用的时候要谨慎。