Lambda表达式和闭包
Contents
ambda表达式
- 使用起来和匿名函数相同
Action a = ()=>{
Console.WriteLine("无参无返回值");
};
Action<int> a1 = (int value )=>{Console.WriteLine("有参无返回值"+value);};
// 可以省略类型 如果只有一个参数 可以省略括号
a1 = value =>{Console.WriteLine("有参无返回值"+value);};
//有返回值 有参数
Func<int,string> f1= value => {return "1"+value;}; 闭包
- 内层的函数可以用用包含在外层函数的变量
- 即使外层函数的执行已经终止
- 注意:
- 该变量提供的值并非变量创建时的值,而是在父函数范围内的最终值
class Test{
public Action action;
public Test(){
int value = 10;//value是临时的 一般情况下函数执行完就会被回收
action = ()=>{
//引用了临时变量value
//此时value的生命周期被改变 value只有action=null时才会被释放
Console.WriteLine(value);
}
for(int i = 0; i < 10; i++){//i临时变量
action += ()=>{
Console.WriteLine(i); //调用Action()打印999999999 i的最终值
}
}
}
}