C#广泛应用的简洁匿名函数Lambda 表达式
Lambda 表达式是一种简洁的方式来定义匿名函数(没有名称的函数)。在 C# 中,Lambda 表达式常用于简化代码,尤其是在需要传递函数作为参数或者定义内联方法时。Lambda 表达式的语法和功能在很多 .NET API 中都得到了广泛应用,比如 LINQ 查询、事件处理和异步编程。
基本语法
Lambda 表达式的基本语法如下:
(parameters) => expression_or_statement_block
示例
-
无参数的 Lambda 表达式:
Action greet = () => Console.WriteLine("Hello, World!"); greet(); // 输出 "Hello, World!"
Action
是一个代表没有参数且没有返回值的委托类型。() => Console.WriteLine("Hello, World!")
是一个无参数的 Lambda 表达式。
-
一个参数的 Lambda 表达式:
Func<int, int> square = x => x * x; int result = square(5); // result = 25
Func<int, int>
是一个代表一个输入参数和一个输出结果的委托类型。x => x * x
是一个接受一个整数参数并返回其平方的 Lambda 表达式。
-
多个参数的 Lambda 表达式:
Func<int, int, int> add = (a, b) => a + b; int sum = add(3, 4); // sum = 7
Func<int, int, int>
是一个接受两个整数参数并返回一个整数结果的委托类型。(a, b) => a + b
是一个接受两个参数并返回它们的和的 Lambda 表达式。
-
包含多个语句的 Lambda 表达式:
Action<int> printDetails = x => { Console.WriteLine($"Value: {x}"); Console.WriteLine($"Square: {x * x}"); }; printDetails(5);
- 这里的 Lambda 表达式包含一个语句块(用
{}
包围),可以在块内执行多个语句。
- 这里的 Lambda 表达式包含一个语句块(用
使用场景
-
LINQ 查询: Lambda 表达式在 LINQ 查询中用作筛选、排序和选择数据的条件。
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; var evenNumbers = numbers.Where(n => n % 2 == 0);
-
事件处理: Lambda 表达式可以用来快速定义事件处理程序。
Button button = new Button(); button.Click += (sender, e) => Console.WriteLine("Button clicked!");
-
任务和异步编程: 在任务和异步编程中,Lambda 表达式简化了代码的编写。
Task.Run(() => { // 异步操作 Console.WriteLine("Task is running."); });
优势
- 简洁: 省去了定义命名方法的开销,使得代码更加简洁。
- 可读性: 将函数逻辑内联到调用处,提高了代码的可读性。
- 灵活性: Lambda 表达式使得可以在运行时动态定义和传递行为。
注意事项
- 类型推断: Lambda 表达式的参数和返回值的类型通常可以由编译器推断。
- 作用域: Lambda 表达式可以捕获其创建时所在作用域中的变量(闭包)。
Lambda 表达式是现代编程语言中处理函数式编程的强大工具,它使得代码更加紧凑和易于理解。