C# Lambda 表达式
介绍
Lambda 表达式是 C# 中一种简洁的匿名函数表示方式,通常用于简化代码并提高可读性。它们可以替代传统的委托或匿名方法,特别适用于需要传递函数作为参数的场景。Lambda 表达式是 C# 3.0 引入的重要特性,广泛应用于 LINQ 查询、事件处理等场景。
什么是 Lambda 表达式?
Lambda 表达式是一种匿名函数,它可以包含表达式或语句块,并且可以用于创建委托或表达式树。它的基本语法如下:
(parameters) => expression
parameters
:输入参数列表,可以是一个或多个参数。=>
:Lambda 运算符,读作“goes to”。expression
:表达式或语句块,表示函数的逻辑。
Lambda 表达式通常用于简化代码,尤其是在需要传递简单函数时。
基本语法
1. 无参数的 Lambda 表达式
如果 Lambda 表达式没有参数,可以使用空括号表示:
() => Console.WriteLine("Hello, World!");
2. 带参数的 Lambda 表达式
如果 Lambda 表达式有参数,可以在括号中指定参数:
(int x, int y) => x + y;
3. 单行表达式与语句块
-
单行表达式:如果 Lambda 表达式只有一行代码,可以直接使用表达式:
csharpx => x * x;
-
语句块:如果 Lambda 表达式包含多行代码,可以使用大括号
{}
包裹:csharpx => {
int result = x * x;
return result;
};
实际应用
1. 使用 Lambda 表达式简化委托
在 C# 中,委托是一种类型安全的函数指针。Lambda 表达式可以简化委托的使用。例如:
// 定义一个委托
delegate int Operation(int x, int y);
// 使用 Lambda 表达式实例化委托
Operation add = (x, y) => x + y;
// 调用委托
int result = add(3, 5); // 输出:8
Console.WriteLine(result);
2. 在 LINQ 中使用 Lambda 表达式
Lambda 表达式在 LINQ 查询中非常常见。例如,筛选一个列表中的偶数:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
// 使用 Lambda 表达式筛选偶数
var evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // 输出:2, 4, 6
}
3. 事件处理中的 Lambda 表达式
Lambda 表达式可以用于简化事件处理程序的编写。例如:
Button button = new Button();
// 使用 Lambda 表达式订阅事件
button.Click += (sender, e) => Console.WriteLine("Button clicked!");
// 模拟按钮点击
button.PerformClick(); // 输出:Button clicked!
实际案例
案例 1:排序列表
假设我们有一个包含字符串的列表,需要按字符串长度排序:
List<string> words = new List<string> { "apple", "banana", "cherry", "date" };
// 使用 Lambda 表达式排序
var sortedWords = words.OrderBy(w => w.Length);
foreach (var word in sortedWords)
{
Console.WriteLine(word); // 输出:date, apple, cherry, banana
}
案例 2:自定义筛选器
假设我们需要筛选出列表中大于某个值的数字:
List<int> numbers = new List<int> { 10, 20, 30, 40, 50 };
// 使用 Lambda 表达式筛选大于 25 的数字
var filteredNumbers = numbers.Where(n => n > 25);
foreach (var num in filteredNumbers)
{
Console.WriteLine(num); // 输出:30, 40, 50
}
总结
Lambda 表达式是 C# 中一种强大的工具,可以显著简化代码并提高可读性。它们特别适用于需要传递简单函数的场景,例如委托、LINQ 查询和事件处理。通过本文的学习,你应该已经掌握了 Lambda 表达式的基本语法和实际应用。
Lambda 表达式是 C# 中函数式编程的重要组成部分,熟练掌握它们将帮助你编写更简洁、更高效的代码。
附加资源与练习
练习 1
编写一个 Lambda 表达式,计算两个整数的乘积,并将其赋值给一个委托。
练习 2
使用 Lambda 表达式对一个包含学生姓名和分数的列表按分数从高到低排序。