C# Lambda
Posted dewumu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# Lambda相关的知识,希望对你有一定的参考价值。
一、Lambda演变历史
Lambda 1.0 普通方法
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);
2.0 出现了匿名方法 使用delegate关键字 声明
//.NetFramework2.0 匿名方法,delegate关键字 //可以访问局部变量 NoReturnWithPara method = new NoReturnWithPara(delegate (int id, string name) Console.WriteLine(i); Console.WriteLine($"id name 正在学习"); ); method.Invoke(1, "name");
3.0 去掉delegate关键字 将方法用=>连接
//.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可以省掉,也是语法糖,编译器自动加上
以上是关于C# Lambda的主要内容,如果未能解决你的问题,请参考以下文章