C# 匿名委托和lambda表达式 作者:马育民 • 2025-03-10 00:31 • 阅读:10016 # 匿名委托 [C# 委托](https://www.malaoshi.top/show_1GWoVMw3ivP.html "C# 委托") 文中,委托方法 `Std()` 和 `Std2()`,都很简单,此时不需要声明方法,可以用匿名委托 ``` static void Main(string[] args) { StdDel sd = new StdDel(delegate(){ Console.WriteLine("学习委托1"); });// 匿名委托 Test(sd); Console.ReadKey(); } ``` # lambda表达式 可以继续简化委托 ### 至简原则 1. 只有一个参数,小括号可以 **省略**;但没有参数 或 参数数量超过 1,不能省略小括号 2. 函数体只有一行,则花括号 `{}` 可以省略 3. 函数体只有一行,而是是 `return` ,则花括号 `{}` 和 `return` 可以省略 ``` static void Main(string[] args) { StdDel sd = new StdDel(() =>Console.WriteLine("学习委托1"));// 匿名委托 Test(sd); Console.ReadKey(); } ``` ### 应用场景 让a函数调用b函数,b函数从1打印到100,回调函数能让a函数监控到b函数内部循环的进度 ``` // 定义一个委托类型用于回调函数 public delegate void ProgressCallback(int progress); public class Program { public static void b(ProgressCallback callback) { for (int i = 1; i <= 100; i++) { // 模拟工作 System.Threading.Thread.Sleep(50); // 调用回调通知进度 callback(i); } } static void Main(string[] args) { // b函数的进度更新时会调用此匿名函数 b((progress) => { Console.WriteLine($"Progress from b: {progress}%"); }); } } ``` 原文出处:https://malaoshi.top/show_1GWjLNYvhaS.html