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

17次阅读

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

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

在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#开发中不可或缺的一部分。

text=ZqhQzanResources