C# Lambda
2021-02-06 04:15
标签:none new net splay style str return oid cli 一、Lambda演变历史 Lambda 1.0 普通方法 声明委托 讲方法作为参数 2.0 出现了匿名方法 使用delegate关键字 声明 3.0 去掉delegate关键字 将方法用=>连接 方法的参数类型 可以由委托推算 因此可以省略参数类型 进一步简化 当方法只有一行时,可以省略外层的大括号和分号 只有一个参数时可以省略方法的外层括号 委托也可以省略 编译器编译时会自动加上 C# Lambda 标签:none new net splay style str return oid cli 原文地址:https://www.cnblogs.com/Dewumu/p/10652549.html private void DoNothing()
{
Console.WriteLine("This is DoNothing");
}
private void Study(int id, string name)
{
Console.WriteLine($"{id} {name} 正在学习");
}
public delegate void NoReturnNoPara();
public delegate void NoReturnWithPara(int x, string y);//1 声明委托
public delegate int WithReturnNoPara();
public delegate string WithReturnWithPara(out int x, ref int y);
{
//.NetFramework1.0 1.1
NoReturnNoPara method = new NoReturnNoPara(this.DoNothing);
}
{
//.NetFramework2.0 匿名方法,delegate关键字
//可以访问局部变量
NoReturnWithPara method = new NoReturnWithPara(delegate (int id, string name)
{
Console.WriteLine(i);
Console.WriteLine($"{id} {name} 正在学习");
});
method.Invoke(1, "name");
}
{
//.NetFramework3.0 把delegate关键字去掉,增加了一个箭头=>
//lambda表达式 参数列表=>方法体
NoReturnWithPara method = new NoReturnWithPara(
(int id, string name) =>
{
Console.WriteLine($"{id} {name} 正在学习");
});
method.Invoke(123, "aaa");
}
{
NoReturnWithPara method = new NoReturnWithPara(
(id, name) =>//省略参数类型,编译器的语法糖,虽然没写,编译时还是有的,根据委托推算
{
Console.WriteLine($"{id} {name} 正在学习");
});
method.Invoke(123, "bbb");
}
{
NoReturnWithPara method = new NoReturnWithPara(
(id, name) => Console.WriteLine($"{id} {name} 正在学习"));
//如果方法体只有一行,可以去掉大括号和分号
method.Invoke(123, "ccc");
}
{
NoReturnWithPara method = (id, name) => Console.WriteLine($"{id} {name} 正在学习");
method.Invoke(123, "ddd"); //new NoReturnWithPara可以省掉,也是语法糖,编译器自动加上
}