Lambda表达式演变
一.委托使用
using System; namespace DelegateTest { public delegate void D1(string message);//1.声明一个委托类型 internal class Program { static void Main(string[] args) { D1 d1 = F1;//声明一个委托类型的变量,指向对应的方法 F1("这是委托");//调用 Console.ReadKey(); } static void F1(string message)//2.声明一个符合委托类型签名的方法 { Console.WriteLine($"打印:{message}"); } } }
二.匿名方法
using System; namespace DelegateTest { public delegate void D1(string message);//1.声明一个委托类型 internal class Program { static void Main(string[] args) { D1 d1 = delegate (string message)//声明一个委托类型的变量,指向一个匿名方法,匿名方法需要用到 delegate关键字,不用写方法名称 { Console.WriteLine($"打印{message}"); }; Console.ReadKey(); } } }
三.Lambda表达式替代匿名方法
using System; namespace DelegateTest { public delegate void D1(string message);//1.声明一个委托类型 internal class Program { static void Main(string[] args) { D1 d1 = (string message) => //2.使用Lambda表达式替代匿名方法,不需要delegate关键字 用=>指向方法主体 { Console.WriteLine($"打印{message}"); }; Console.ReadKey(); } } }
四.Action、Func
using System; namespace DelegateTest { internal class Program { static void Main(string[] args) { Action<string> a1 = (string message) => //Action是C#内置的无返回值委托类型 { Console.WriteLine($"打印{message}"); }; a1("这是无返回值委托"); Func<int, int, int> f1 = (int j, int k) =>//Func是C#内置的有返回值的委托类型,最后一个泛型参数为返回值类型 { return j + k; }; Console.WriteLine($"打印{f1(4, 5)}"); } } }
五.Lambda表达式演变
using System; namespace DelegateTest { internal class Program { static void Main(string[] args) { Func<int, int, int> f1 = (int j, int k) => { return j + k; }; Console.WriteLine($"打印{f1(4, 5)}"); Func<int, int, int> f2 = (int j, int k) => j + k; //1.如果方法体内代码只有一行,可以不用写大括号 Console.WriteLine($"打印{f2(4, 5)}"); Func<int, int, int> f3 = (j, k) => j + k; //2.根据类型推断,可以不用写参数类型 Console.WriteLine($"打印{f3(4, 5)}"); Func<int, int> f4 = j => j; //3.参数只有一个,可以不用写括号 Console.WriteLine($"打印{f4(4)}"); } } }

浙公网安备 33010602011771号