您的位置:首页 > 科技 > 能源 > C#广泛应用的简洁匿名函数Lambda 表达式

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

2024/12/23 4:10:21 来源:https://blog.csdn.net/book_dw5189/article/details/142237395  浏览:    关键词: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 表达式是现代编程语言中处理函数式编程的强大工具,它使得代码更加紧凑和易于理解。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com