1.Lambda的演变历史
public delegate void NoReturnNoPara();
public delegate void NoReturnWithPara(int x, string y);
public delegate int WithReturnNoPara();
public delegate string WithReturnWithPara(out int x, ref int y);
public void ShowLambdaHistory()
{
Console.WriteLine($"在.NetFramework1.0/1.1时代");
NoReturnNoPara method1 = new NoReturnNoPara(DoNothing);
method1.Invoke();
NoReturnWithPara method2 = new NoReturnWithPara(Study);
method2.Invoke(3, "牧舟");
Console.WriteLine();
Console.WriteLine("在.NetFramework2.0时代 —— 匿名方法");
Console.WriteLine("增加了一个delegate关键字,可以访问到除了参数以外的局部变量");
string localVar = "局部变量";
NoReturnWithPara method3 = new NoReturnWithPara(delegate (int id, string name)
{
Console.WriteLine($"参数:{
id},{
name}学习高级班课程, localVar = {
localVar}");
});
method3.Invoke(10, "牧舟");
Console.WriteLine();
Console.WriteLine("在.NetFramework3.0时代");
Console.WriteLine("去掉了delegate关键字,添加了一个符号=>,读作“goes to”");
NoReturnWithPara method4 = new NoReturnWithPara((int id, string name) =>
{
Console.WriteLine($"参数:{
id},{
name}学习高级班课程, localVar = {
localVar}");
});
method4.Invoke(11, "牧舟");
Console.WriteLine();
Console.WriteLine("在.NetFramework3.0时代后期");
Console.WriteLine("去掉了匿名方法中的参数类型,编译器自动推断(语法糖)");
NoReturnWithPara method5 = new NoReturnWithPara((id, name) =>
{
Console.WriteLine($"参数:{
id},{
name}学习高级班课程, localVar = {
localVar}");
});
method5.Invoke(13, "牧舟");
Console.WriteLine();
Console.WriteLine("如果匿名方法体中,只有一行代码,可以省略方法体的大括号");
NoReturnWithPara method6 = new NoReturnWithPara((id, name) =>
Console.WriteLine($"参数:{
id},{
name}学习高级班课程, localVar = {
localVar}"));
method6.Invoke(14, "牧舟");
Console.WriteLine("继续精进……");
NoReturnWithPara method7 = (id, name) =>
Console.