1. lambda表达式是一个匿名函数,匿名方法。
namespace lambda { public delegate void NoReturnWithPara(string name); //声明委托 class LambdaShow { public void Show() { { NoReturnWithPara method = new NoReturnWithPara(this.Study); //声明委托实例,调用方法 method.Invoke("YOYO"); } { NoReturnWithPara method = new NoReturnWithPara( //单独声明的方法换成匿名方法 delegate (string name) { Console.WriteLine("{0} is studying lambda !", name); } ); } { NoReturnWithPara method = new NoReturnWithPara( //单独声明的方法换成匿名方法 (string name) =>//delegate关键字换成了goes to => { Console.WriteLine("{0} is studying lambda !", name); } ); } { NoReturnWithPara method = new NoReturnWithPara( //单独声明的方法换成匿名方法 (name) =>//委托实例化要求方法的签名必须和委托一致 { Console.WriteLine("{0} is studying lambda !", name); } ); } { NoReturnWithPara method = new NoReturnWithPara( //单独声明的方法换成匿名方法 name=>//只有一个参数可以去掉小括号;如果方法体只有一行,大括号和分号也都可以去掉 Console.WriteLine("{0} is studying lambda !", name) ); } { //委托实例化可以不要new NoReturnWithPara method = name => Console.WriteLine("{0} is studying lambda !", name); } } private void Study(string name) { Console.WriteLine("{0} is studying lambda !", name); } } }
2. .net提供了两个标准的委托 Action 和 Func
//.net提供了两个标准的委托 // public delegate void Action(); 无参数无返回值 Action act1 = () => Console.WriteLine("test"); //public delegate void Action<in T>(T obj); 有参数无返回值的泛型委托 Action<string> act2 = name => Console.WriteLine("test"); Action <int,string > act4=(id,name) => Console.WriteLine("test"); //0个泛型参数,无返回值的委托 Action<string, int, double, DateTime, long, decimal, float, string, int, double, DateTime, long, decimal, float, decimal, float> act3 = null; // public delegate TResult Func<out TResult>(); 无参数有一个返回值的委托 //里面的in,out代表输入参数,输出结果 //这里不需要return,直接给返回值 Func<int> fun1 = () => 3; // 一个参数一个返回值的委托 Func<string, int> fun2 = s => 3; //两个参数一个返回值的委托 Func<string, int, int> fun3 = (s, i) => 3; //16个参数一个返回值的委托 Func<string , string, int, double, DateTime, long, decimal, float, string, int, double, DateTime, long, decimal, float, decimal, float> fun4 = null;
3. linq扩展展示
class LinqShow { public static void Show() { List<int> intList = new List<int>() { 21,56,95,234,854,12,456}; //Func<int, bool> func = t => t > 100; foreach (var item in intList .Where(t=>t>100)) //陈述式的语法 { Console.WriteLine(item); } foreach (var item in intList.Where(t => t > 100) .Select(t=>string .Format ("这里是数字{0}",t)) .OrderBy(t=>t)) { Console.WriteLine(item); } } }