lambda表达式
前言
C# 中的 Lambda 表达式是一段简短的代码块,它接受参数并返回一个值。Lambda 表达式被定义为匿名函数(即没有名称的函数)。例如:
num => num * 7
在这个例子中,num
是输入参数,num * 7
是返回值。Lambda 表达式本身不会执行,而是作为参数传递给其他方法或赋值给变量。
作用
Lambda 表达式使得代码更加简洁,可以直接在需要的地方定义小型函数。它们常用于委托和 LINQ 查询中,使代码更具可读性和维护性。
使用场景
Lambda 表达式的常见使用场景包括:
- 简化委托:在使用委托时,Lambda 表达式可以替代传统的匿名方法,使代码更简洁。
- LINQ 查询:在 LINQ 查询中使用 Lambda 表达式来定义筛选、排序和转换逻辑。
- 事件处理:在事件处理程序中直接定义逻辑,而无需单独的方法。
示例
- 表达式 Lambda
表达式 Lambda 包含 Lambda 体中的单个表达式。例如:
using System;
class Program
{
static void Main()
{
// 表达式 Lambda 返回一个数的平方
var square = (int num) => num * num;
// 传入参数到表达式 Lambda
Console.WriteLine("数字的平方: " + square(5));
}
}
输出
数字的平方: 25
在这个例子中,表达式 Lambda 是 (int num) => num * num
。它计算 num
的平方,并将结果赋值给 square
变量。传入 5
时,返回 25
。
- 语句 Lambda
语句 Lambda 包含一个或多个语句,语句被大括号 {}
包围。例如:
using System;
class Program
{
static void Main()
{
// 语句 Lambda 接受两个整数输入并返回它们的和
var resultingSum = (int a, int b) =>
{
int calculatedSum = a + b;
return calculatedSum;
};
// 计算 5 和 6 的和
Console.WriteLine("总和: " + resultingSum(5, 6));
}
}
输出
总和: 11
在这个例子中,语句 Lambda (int a, int b) => { int calculatedSum = a + b; return calculatedSum; }
计算两个整数 a
和 b
的和并返回结果。
Lambda 表达式与委托
在 C# 中,我们可以将 Lambda 表达式分配给委托类型,如 Func
。例如:
using System;
class Program
{
static void Main()
{
// 使用 Lambda 表达式与委托类型
// 接受一个整数输入,将其乘以 3 并返回结果
Func<int, int> multiply = num => num * 3;
// 调用 multiply() 方法,传入 5 作为输入
Console.WriteLine(multiply(5));
}
}
输出
15
在这个例子中,我们将 Lambda 表达式 num => num * 3
分配给 Func
委托 multiply
。Lambda 表达式接受一个 int
类型的输入 num
,将其乘以 3 并返回结果。当传入 5
时,返回 15
。
Lambda 表达式的使用
- 简化委托代码
使用 Lambda 表达式可以使委托代码更简洁。对比使用和不使用 Lambda 表达式的程序:
不使用 Lambda 表达式的程序
using System;
class Program
{
static void Main()
{
// 返回一个数的平方的方法
int Square(int num)
{
return num * num;
}
// 委托指向 Square() 方法
Func<int, int> square = Square;
// 调用 square() 委托
Console.WriteLine(square(7));
}
}
输出
49
在上面的程序中,我们定义了一个 Square
方法并将其分配给 Func
委托 square
。
使用 Lambda 表达式的程序
using System;
class Program
{
static void Main()
{
// 使用 Lambda 表达式的委托
Func<int, int> square = num => num * num;
// 调用 square() 委托
Console.WriteLine(square(7));
}
}
输出
49
在这里,我们用 Lambda 表达式直接定义了委托的实现,而无需单独定义 Square
方法。
- 将 Lambda 表达式作为参数传递
我们可以将 Lambda 表达式作为参数传递给方法。例如,使用 C# 数组的内置 Count()
方法,并将 Lambda 表达式作为参数传递:
using System;
using System.Linq; // 需要使用 LINQ
class Program
{
static void Main()
{
// 包含整数值的数组
int[] numbers = { 2, 13, 1, 4, 13, 5 };
// Lambda 表达式作为方法参数
// 返回数组中 13 的总数
int totalCount = numbers.Count(x => x == 13);
Console.WriteLine("13 的总数: " + totalCount);
}
}
输出
13 的总数: 2
在这个例子中,我们将 Lambda 表达式 x => x == 13
作为参数传递给 Count()
方法。该方法检查数组中每个元素,并计算总共有多少个 13
。
结语
Lambda 表达式是 C# 中一种强大的功能,能使代码更加简洁和易于维护。它们在处理委托、LINQ 查询以及其他需要传递小型函数的场景中非常有用。通过使用 Lambda 表达式,开发者可以更高效地编写代码,减少冗余。