匿名方法
class Program
{
static int Test1(int arg1, int arg2)
{
return arg1 + arg2;
}
static void Main(string[] args)
{
Func<int, int, int> plus = Test1;
//匿名方法形式
//一般用于回调
//本质上还一个方法,只是没有名字,任何使用委托变量的地方都可以使用匿名方法赋值
Func<int, int, int> plus1 = delegate (int arg1, int arg2)
{
return arg1 + arg2;
};
}
}
lamabda表达式
class Program
{
static void Main(string[] args)
{
//Func<int, int, int> plus1 = delegate (int arg1, int arg2)
//{
// return arg1 + arg2;
//};
//lambda表达式用来代替匿名方法,所以一个lambda表达式也是定义了一个方法
//lambda表达式的参数是不需要声明类型的
Func<int, int, int> plus1 = (int arg1, int arg2)=>
{
return arg1 + arg2;
};
//lambda表示的参数只有一个的时候,可以不加上括号,当函数体的语句只有一句的时候,我们可以不加上大括号,也可以不加上Return语句
//如果lambda表达式的失信代码中需要多条语句,就必须添加花括号和return语句
Func<int, int> plus2 = a => a+1;
Func<int, int> plus3 = a =>
{
return a + 1;
};
Console.WriteLine(plus1(90, 60));
Console.WriteLine(plus2(90));
Console.WriteLine(plus3(90));
Console.ReadKey();
//通过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变量的控制,结果不可控,容易出现编程问题,用的时候要谨慎。
}
}