C#广泛应用的简洁匿名函数Lambda 表达式

Lambda 表达式是一种简洁的方式来定义匿名函数(没有名称的函数)。在 C# 中,Lambda 表达式常用于简化代码,尤其是在需要传递函数作为参数或者定义内联方法时。Lambda 表达式的语法和功能在很多 .NET API 中都得到了广泛应用,比如 LINQ 查询、事件处理和异步编程。

基本语法

Lambda 表达式的基本语法如下:

(parameters) => expression_or_statement_block

示例

  1. 无参数的 Lambda 表达式:

    Action greet = () => Console.WriteLine("Hello, World!");
    greet(); // 输出 "Hello, World!"
    
    • Action 是一个代表没有参数且没有返回值的委托类型。
    • () => Console.WriteLine("Hello, World!") 是一个无参数的 Lambda 表达式。
  2. 一个参数的 Lambda 表达式:

    Func<int, int> square = x => x * x;
    int result = square(5); // result = 25
    
    • Func<int, int> 是一个代表一个输入参数和一个输出结果的委托类型。
    • x => x * x 是一个接受一个整数参数并返回其平方的 Lambda 表达式。
  3. 多个参数的 Lambda 表达式:

    Func<int, int, int> add = (a, b) => a + b;
    int sum = add(3, 4); // sum = 7
    
    • Func<int, int, int> 是一个接受两个整数参数并返回一个整数结果的委托类型。
    • (a, b) => a + b 是一个接受两个参数并返回它们的和的 Lambda 表达式。
  4. 包含多个语句的 Lambda 表达式:

    Action<int> printDetails = x =>
    {
        Console.WriteLine($"Value: {x}");
        Console.WriteLine($"Square: {x * x}");
    };
    printDetails(5);
    
    • 这里的 Lambda 表达式包含一个语句块(用 {} 包围),可以在块内执行多个语句。

使用场景

  1. LINQ 查询: Lambda 表达式在 LINQ 查询中用作筛选、排序和选择数据的条件。

    List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
    var evenNumbers = numbers.Where(n => n % 2 == 0);
    
  2. 事件处理: Lambda 表达式可以用来快速定义事件处理程序。

    Button button = new Button();
    button.Click += (sender, e) => Console.WriteLine("Button clicked!");
    
  3. 任务和异步编程: 在任务和异步编程中,Lambda 表达式简化了代码的编写。

    Task.Run(() => 
    {
        // 异步操作
        Console.WriteLine("Task is running.");
    });
    

优势

  • 简洁: 省去了定义命名方法的开销,使得代码更加简洁。
  • 可读性: 将函数逻辑内联到调用处,提高了代码的可读性。
  • 灵活性: Lambda 表达式使得可以在运行时动态定义和传递行为。

注意事项

  • 类型推断: Lambda 表达式的参数和返回值的类型通常可以由编译器推断。
  • 作用域: Lambda 表达式可以捕获其创建时所在作用域中的变量(闭包)。

Lambda 表达式是现代编程语言中处理函数式编程的强大工具,它使得代码更加紧凑和易于理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值