Lambda表达式_匿名方法_委托<16/9/2017>
代替匿名方法的简单演示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lambda表达式
{
class Program
{
static void Main(string[] args)
{
//lambda表达式用来代替匿名方法,所以一个lambda表达式也是定义了一个方法
Func<int, int, int> plus = delegate (int a, int b)
{
return a + b;
};
Func<int, int, int> plusLambda = (a, b) =>//lambada表达式的参数不需要声明类型的
{
return a + b;
};
Console.WriteLine(plus);
Console.WriteLine(plusLambda);
Console.WriteLine(plus(1,2));
Console.WriteLine(plusLambda(2,4));
}
}
}
Lambda表达式小技巧和使用规则
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lambda表达式
{
class Program
{
static void Main(string[] args)
{
//Lambda表达式用来代替匿名方法,所以一个lambda表达式也是定义了一个方法
//1.当参数只有一个的时候可以不加括号,当函数体的语句只有一句,可不加花括号,也可以不加上return语句(编译器会自动添加)
//2.当Lambda表达式实现代码中需要多条语句,必加花括号和return语句
Func<int, int> a = m => m + 1;
Func<int, int> b = (m) => { return m + 1; };
Console.WriteLine(a(1));
Console.WriteLine(b(2));
}
}
}
关于Lambda表达式对于外部变量的注意事项:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lambda表达式
{
class Program
{
static void Main(string[] args)
{
//Lambda表达式可以访问外部变量
int somVal = 5;
Func<int, int> f = x => x + somVal;
Console.WriteLine(f(3));//8
somVal = 7;
Console.WriteLine(f(3));//10
//方法结果不光受到参数控制,还受到somVal变量的控制,结果不可控(存在被其他因素更改的情况)
}
}
}