30 lambda表达式 知识点
//什么是lambda表达式
//可以将lambda表达式 理解为匿名函数的简写
//它除了写法不同外
//使用和匿名函数一模一样
//都是和委托或者事件 配合使用的
//无参无返回值
Action at = () =>{Console.WriteLine("无参无返回"); }; at.Invoke();
//有参无返回值
Action<int>st1=(int value) =>
{
Console.WriteLine("有参数{0}", value);
};
//有参无返回值第二种表示方式——省略参数类型写法
Action<int>st1=( value) =>
{
Console.WriteLine("有参数{0}", value);
};
//有参有返回值
Func<string, int> st3 = (value) =>
{
Console.WriteLine("有参数有返回值{0}", value);
return 1;
};
//闭包
//内层的函数可以引用包含在它外层的函数的变量
//即使外层函数的执行已经终止
//注意
//该变量提供的值并非变量创建时的值,而是在父函数范围内的最终值
class Test
{
Action ac;
//这里就形成了闭包
//因为当构造函数执行完毕时,其中申明的临时变量Value的声明被改变了
public Test()
{
int Value = 10;
ac = () =>
{
Console.WriteLine(Value);
};
for (int i = 0; i < 20; i++)
{
ac += () =>
{
//此处获取i的值是i的最终值(因为在调用ac方法前,i的最终值为20)
//解决方法是在函数内部重新申明一个局部变量来接收i的值
Console.WriteLine(i);
/*
20
20
20
20
20
20
20
20
20
*/
};
}
}
//此处调用
public void Dosomthing()
{
ac.Invoke();
}
}

浙公网安备 33010602011771号