高级

lambda表达式

预计阅读时间2 分钟 9 views

前言

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

num => num * 7

在这个例子中,num 是输入参数,num * 7 是返回值。Lambda 表达式本身不会执行,而是作为参数传递给其他方法或赋值给变量。

作用

Lambda 表达式使得代码更加简洁,可以直接在需要的地方定义小型函数。它们常用于委托和 LINQ 查询中,使代码更具可读性和维护性。

使用场景

Lambda 表达式的常见使用场景包括:

  1. 简化委托:在使用委托时,Lambda 表达式可以替代传统的匿名方法,使代码更简洁。
  2. LINQ 查询:在 LINQ 查询中使用 Lambda 表达式来定义筛选、排序和转换逻辑。
  3. 事件处理:在事件处理程序中直接定义逻辑,而无需单独的方法。

示例

  1. 表达式 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

  1. 语句 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; } 计算两个整数 ab 的和并返回结果。

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 表达式的使用

  1. 简化委托代码

使用 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 方法。

  1. 将 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 表达式,开发者可以更高效地编写代码,减少冗余。

Leave a Comment

分享此文档

lambda表达式

或复制链接

内容