Lambda表达式是C#中用于创建匿名函数的简洁语法,以=>运算符分隔参数与逻辑,可自动转换为委托或表达式树,广泛应用于LINQ、事件处理、集合操作及异步编程等场景。

在C#中,Lambda表达式是一种简洁的语法形式,用于创建匿名函数。它允许你以更紧凑的方式编写方法逻辑,特别适合用在需要委托或函数式编程的场景中,比如LINQ查询、事件处理和集合操作。
什么是Lambda表达式?
Lambda表达式本质上是简化版的匿名方法。它使用 => 运算符,左边是输入参数,右边是执行的表达式或语句块。编译器会根据上下文将其转换为委托类型(如 Func
例如:
var squares = numbers.Select(x => x * x);button.Click += (sender, e) => MessageBox.Show("按钮被点击");
上面两行代码中的 x => x * x 和 (sender, e) => MessageBox.Show(...) 就是典型的Lambda表达式,它们没有方法名,但直接表达了行为逻辑。
Lambda表达式的语法形式
Lambda表达式有两种主要形式:表达式Lambda和语句Lambda。
- 表达式Lambda:适用于只返回一个表达式结果的场景,省略大括号和return关键字。 x => x * 2
- 语句Lambda:当逻辑较复杂时,可以使用大括号包裹多条语句。 (a, b) => {
var sum = a + b;
return sum * 2;
}
参数列表可以根据参数数量灵活书写:单个参数可省略括号,无参数则必须写空括号 () => ...。
常见应用场景
Lambda表达式在实际开发中广泛应用于以下几种情况:
- LINQ查询:筛选、投影、排序等操作中大量使用Lambda。 var adults = people.Where(p => p.Age >= 18);
- 集合操作:List.Find、FindAll、ForEach 等方法接受Predicate或Action委托。 list.ForEach(item => Console.WriteLine(item));
- 事件注册:简化事件处理逻辑,尤其适合临时处理程序。 timer.Elapsed += (e, sender) => Console.WriteLine("时间到!");
- 异步编程:配合 Task.Run 使用,快速启动后台任务。 Task.Run(() => DoWork());
var names = people.Select(p => p.Name);
与匿名方法的区别
C#早期版本使用匿名方法来实现类似功能,语法更冗长:
delegate(int x) { return x * 2; }Lambda表达式不仅更短,还支持类型推断,使代码更清晰易读。而且在LINQ to SQL等场景中,Lambda可被解析为表达式树,从而转换为SQL语句执行,这是普通委托做不到的。
基本上就这些。Lambda表达式让C#在保持类型安全的同时,拥有了函数式编程的灵活性,是现代C#开发中不可或缺的一部分。









