C# Lambda 表达式

C# Lambda 表达式是一段接受参数并返回值的简短代码块。它被定义为一个匿名函数(没有名称的函数)。例如,

num => num * 7

在这里,num 是一个输入参数,num * 7 是一个返回值。Lambda 表达式本身不执行。相反,我们在其他方法或变量中使用它。

下面让我们详细了解 Lambda 表达式。


如何定义 Lambda 表达式

我们可以在 C# 中将 Lambda 表达式定义为:

(parameterList) => lambda body

这里,

  • parameterList - 输入参数列表
  • => - Lambda 运算符
  • lambda body - 可以是表达式或语句

根据 Lambda 主体,C# Lambda 表达式分为两种类型。


Lambda 表达式的类型

Lambda 表达式的两种类型是

  1. 表达式 Lambda
  2. 语句 Lambda

1. 表达式 Lambda: 表达式 Lambda 在 Lambda 主体中包含单个表达式。例如,

(int num) => num * 5;

上面的表达式 Lambda 在 Lambda 主体中包含单个表达式 num * 5。它接受一个 int 输入,将其乘以 5,然后返回输出。

2. 语句 Lambda: 语句 Lambda 在 Lambda 主体中包含一个或多个语句。我们使用大括号 {} 来包装语句。例如,

(int a, int b) =>
{
    var sum = a + b;
    return sum;
};

上面的表达式是一个语句 Lambda,它在 Lambda 主体中包含两个语句。它接受两个 int 输入并返回它们的和。

让我们通过示例来清楚地了解 C# Lambda。


示例:C# 表达式 Lambda

using System;
class Program
{
    static void Main()
    {
// expression lambda that returns the square of a number var square = (int num) => num * num;
// passing input to the expression lambda Console.WriteLine("Square of number: " + square(5)); } }

输出

Square of number: 25

在上面的示例中,表达式 Lambda 是

(int num) => num * num;

在这里,表达式 Lambda 返回 num 的平方。然后我们将表达式 Lambda 赋值给 square 变量。

因此,当我们传递 5 作为 square 的输入时,我们得到 25 作为输出。


示例:C# 语句 Lambda

using System;
class Program
{
    static void Main()
    {
// statement lambda that takes two int inputs and returns the sum var resultingSum = (int a, int b) => { int calculatedSum = a + b; return calculatedSum; };
// find the sum of 5 and 6 Console.WriteLine("Total sum: " + resultingSum(5, 6)); } }

输出

Total sum: 11

在上面的示例中,我们使用了语句 Lambda:

(int a, int b) =>
{
    int calculatedSum = a + b;
    return calculatedSum;
}

在这里,语句 Lambda 接受两个整数参数 - ab。在 Lambda 运算符 => 的右侧,我们包含了两个语句,它们

  • 计算 ab 的和
  • 返回和

注意: 在 C# 9.0 之前,在使用 var 和 Lambda 表达式时,必须显式定义委托类型。C# 9.0 引入了在不指定委托类型的情况下将 Lambda 表达式赋值给 var 的功能。


带有委托的 Lambda 表达式

在 C# 中,我们可以将 Lambda 表达式赋值给像 Func 这样的委托类型。例如,

using System;
class Program
{
    static void Main()
    {
// using lambda expression with delegate type // take an int input, multiply it with 3 and return the result Func<int, int> multiply = num => num * 3;
// calls multiply() by passing 5 as an input Console.WriteLine(multiply(5)); } }

输出

15

在上面的示例中,我们将 Lambda 表达式 num => num * 3; 赋值给了 Func 委托 multiply

在这里,Lambda 表达式接受一个 int 类型的输入 num,将其乘以 3,并将结果返回给 multiply()

因此,当我们向 multiply() 传递 5 时,它返回 15

注意: Func<> 委托类型接受 0 个或多个输入值并返回一个输出值。例如,Func<int,int,string> 接受两个 int 输入并返回一个 string 输出。要了解更多关于委托的信息,请访问 C# 委托


Lambda 表达式的用途

Lambda 表达式的一些用途是

1. 编写简单易懂的委托代码

使用 Lambda 表达式,我们可以编写更简单易懂的代码。让我们看看在委托中使用 Lambda 表达式和不使用 Lambda 表达式的程序。

不使用 Lambda 表达式的程序

using System;
class Program
{
    static void Main()
    {
        // method that returns square of a number
        int Square(int num)
        {
            return num * num;
        }

        // delegate that points the Square() method 
        Func<int, int> square = Square;

        // calling square() delegate 
        Console.WriteLine(square(7));
    }
}

输出

49

在上面的程序中,我们定义了一个指向 Square() 方法的 Func 类型的委托 square

使用 Lambda 表达式的程序

using System;
class Program
{
    static void Main()
    {
        // delegate using lambda expression 
        Func<int, int> square = num => num * num;

        // calling square() delegate 
        Console.WriteLine(square(7));
    }
}

输出

49

在这里,我们无需定义单独的方法。我们用 Lambda 表达式替换了指向 square() 方法的指针。

2. 将参数传递给方法

我们可以将 Lambda 表达式作为参数传递给方法调用。

让我们以 C# 数组的内置 Count() 方法为例,并将 Lambda 表达式作为其参数传递。

using System;
class Program
{
    static void Main()
    {
        // array containing integer values 
        int[] numbers = { 2, 13, 1, 4, 13, 5 };

// lambda expression as method parameter // returns the total count of 13 in the numbers array int totalCount = numbers.Count(x => x == 13);
Console.WriteLine("Total number of 13: " + totalCount); } }

输出

Total number of 13: 2

在上面的示例中,我们将 Lambda 表达式 x => x == 13 作为方法参数传递。

Count() 方法会检查 numbers 数组的每个元素,并计算数组中 13 的总数。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战