C# 语言 Lambda 表达式进阶应用

C#阿木 发布于 2025-06-12 8 次阅读


C Lambda 表达式进阶应用

Lambda 表达式是 C 中一种强大的特性,它允许开发者以更简洁的方式编写匿名函数。在 C 3.0 及以后的版本中,Lambda 表达式被引入,极大地丰富了 C 的函数式编程能力。本文将围绕 C Lambda 表达式的进阶应用展开,探讨其在各种场景下的使用技巧和最佳实践。

一、Lambda 表达式简介

Lambda 表达式是一种匿名函数,它允许在运行时创建临时函数。在 C 中,Lambda 表达式通常用于定义委托类型的实例,或者作为 LINQ 查询的查询表达式。

Lambda 表达式的语法如下:

csharp
参数列表 -> 表达式体

其中,`参数列表` 是委托的参数列表,`表达式体` 是委托要执行的操作。

二、Lambda 表达式的进阶应用

1. 高阶函数

高阶函数是指接受函数作为参数或返回函数的函数。在 C 中,Lambda 表达式可以轻松地实现高阶函数。

以下是一个使用 Lambda 表达式实现的高阶函数示例:

csharp
Func square = x => x x;
Func add = (x, y) => x + y;

int result = square(add(2, 3)); // result = 25

在这个例子中,`square` 和 `add` 都是高阶函数,它们分别接受一个函数作为参数。

2. LINQ 查询

LINQ(Language Integrated Query)是 C 中的一种查询技术,它允许开发者以声明性方式查询数据源。Lambda 表达式是 LINQ 查询的核心。

以下是一个使用 Lambda 表达式进行 LINQ 查询的示例:

csharp
List numbers = new List { 1, 2, 3, 4, 5 };

var evenNumbers = numbers.Where(n => n % 2 == 0); // 获取偶数

foreach (var number in evenNumbers)
{
Console.WriteLine(number);
}

在这个例子中,`Where` 是一个 LINQ 查询操作符,它接受一个 Lambda 表达式作为参数,用于筛选出符合条件的元素。

3. 异步编程

C 5.0 引入了异步编程模式,Lambda 表达式可以用于简化异步代码。

以下是一个使用 Lambda 表达式进行异步编程的示例:

csharp
async Task Main(string[] args)
{
var result = await Task.Run(() => CalculateSum(1, 2, 3, 4, 5));
Console.WriteLine(result);
}

int CalculateSum(params int[] numbers)
{
return numbers.Sum();
}

在这个例子中,`Task.Run` 是一个异步方法,它接受一个 Lambda 表达式作为参数,用于执行异步操作。

4. 反射和动态类型

Lambda 表达式可以与反射和动态类型一起使用,以实现更灵活的代码。

以下是一个使用 Lambda 表达式和反射的示例:

csharp
Type type = typeof(List);
Func constructor = type.GetConstructor(new Type[] { typeof(int) }).InvokeMethod("Add", new object[] { 1 });

在这个例子中,我们使用反射创建了一个 `List` 实例,并使用 Lambda 表达式作为构造函数的参数。

5. 委托和事件

Lambda 表达式可以用于创建委托和订阅事件。

以下是一个使用 Lambda 表达式订阅事件的示例:

csharp
public class EventExample
{
public event Action OnNumberChanged;

public void ChangeNumber(int number)
{
OnNumberChanged?.Invoke(number);
}
}

EventExample example = new EventExample();
example.OnNumberChanged += number => Console.WriteLine("Number changed to: " + number);
example.ChangeNumber(5); // 输出:Number changed to: 5

在这个例子中,我们使用 Lambda 表达式订阅了 `OnNumberChanged` 事件,并在事件触发时执行相应的操作。

三、总结

Lambda 表达式是 C 中一种强大的特性,它可以在各种场景下提供简洁、高效的代码。相信读者已经对 Lambda 表达式的进阶应用有了更深入的了解。在实际开发中,合理运用 Lambda 表达式可以提高代码的可读性和可维护性,同时也能提高开发效率。