C#中的Lambda表达式是什么 - 匿名函数的简洁写法与应用

来源:这里教程网 时间:2026-02-21 17:35:58 作者:

在C#中,Lambda表达式是一种简洁的语法形式,用于创建匿名函数。它允许你以更紧凑的方式编写方法逻辑,特别适合用在需要委托或函数式编程的场景中,比如LINQ查询、事件处理和集合操作。

什么是Lambda表达式?

Lambda表达式本质上是简化版的匿名方法。它使用 => 运算符,左边是输入参数,右边是执行的表达式或语句块。编译器会根据上下文将其转换为委托类型(如 FuncAction)或表达式树。

例如:

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);
var names = people.Select(p => p.Name);
集合操作:List.Find、FindAll、ForEach 等方法接受Predicate或Action委托。 list.ForEach(item => Console.WriteLine(item)); 事件注册:简化事件处理逻辑,尤其适合临时处理程序。 timer.Elapsed += (e, sender) => Console.WriteLine("时间到!"); 异步编程:配合 Task.Run 使用,快速启动后台任务。 Task.Run(() => DoWork());

与匿名方法的区别

C#早期版本使用匿名方法来实现类似功能,语法更冗长:

delegate(int x) { return x * 2; }

Lambda表达式不仅更短,还支持类型推断,使代码更清晰易读。而且在LINQ to SQL等场景中,Lambda可被解析为表达式树,从而转换为SQL语句执行,这是普通委托做不到的。

基本上就这些。Lambda表达式让C#在保持类型安全的同时,拥有了函数式编程的灵活性,是现代C#开发中不可或缺的一部分。

相关推荐