跳到主要内容

C# Lambda 表达式

介绍

Lambda 表达式是 C# 中一种简洁的匿名函数表示方式,通常用于简化代码并提高可读性。它们可以替代传统的委托或匿名方法,特别适用于需要传递函数作为参数的场景。Lambda 表达式是 C# 3.0 引入的重要特性,广泛应用于 LINQ 查询、事件处理等场景。

什么是 Lambda 表达式?

Lambda 表达式是一种匿名函数,它可以包含表达式或语句块,并且可以用于创建委托或表达式树。它的基本语法如下:

csharp
(parameters) => expression
  • parameters:输入参数列表,可以是一个或多个参数。
  • =>:Lambda 运算符,读作“goes to”。
  • expression:表达式或语句块,表示函数的逻辑。
提示

Lambda 表达式通常用于简化代码,尤其是在需要传递简单函数时。


基本语法

1. 无参数的 Lambda 表达式

如果 Lambda 表达式没有参数,可以使用空括号表示:

csharp
() => Console.WriteLine("Hello, World!");

2. 带参数的 Lambda 表达式

如果 Lambda 表达式有参数,可以在括号中指定参数:

csharp
(int x, int y) => x + y;

3. 单行表达式与语句块

  • 单行表达式:如果 Lambda 表达式只有一行代码,可以直接使用表达式:

    csharp
    x => x * x;
  • 语句块:如果 Lambda 表达式包含多行代码,可以使用大括号 {} 包裹:

    csharp
    x => {
    int result = x * x;
    return result;
    };

实际应用

1. 使用 Lambda 表达式简化委托

在 C# 中,委托是一种类型安全的函数指针。Lambda 表达式可以简化委托的使用。例如:

csharp
// 定义一个委托
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 查询中非常常见。例如,筛选一个列表中的偶数:

csharp
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 表达式可以用于简化事件处理程序的编写。例如:

csharp
Button button = new Button();

// 使用 Lambda 表达式订阅事件
button.Click += (sender, e) => Console.WriteLine("Button clicked!");

// 模拟按钮点击
button.PerformClick(); // 输出:Button clicked!

实际案例

案例 1:排序列表

假设我们有一个包含字符串的列表,需要按字符串长度排序:

csharp
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:自定义筛选器

假设我们需要筛选出列表中大于某个值的数字:

csharp
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 表达式对一个包含学生姓名和分数的列表按分数从高到低排序。

附加资源