当前位置: 首页 > article >正文

Lambda 表达式学习

C# 中的 Lambda 表达式:简洁与灵活的函数表示

在C#编程中,Lambda表达式是一种强大的特性,它允许我们以简洁的语法定义匿名函数。Lambda表达式广泛应用于委托、LINQ查询以及需要传递方法作为参数的场景。本文将详细介绍Lambda表达式的基本语法、使用场景以及实际示例,帮助你更好地理解和使用这一特性。

1、什么是Lambda表达式?

Lambda表达式是一种匿名函数,它可以包含表达式或语句块,并且可以作为参数传递给方法或赋值给委托。Lambda表达式的核心优势在于其简洁性和灵活性,尤其是在需要传递简单逻辑时,它可以显著减少代码量。

1.1Lambda表达式的基本语法

Lambda表达式的语法为:(参数列表) => 表达式或语句块

参数列表:可以是零个或多个参数,参数类型可以显式声明或由编译器推断。

=>:Lambda运算符,读作“goes to”。

表达式或语句块:如果只有一行代码,可以直接写表达式;如果有多行代码,需要用{}包裹。

2、Lambda表达式的使用场景
2.1. 委托与Lambda表达式

Lambda表达式可以用于简化委托的定义和调用。例如:

public delegate int MathOperation(int a, int b);

MathOperation multiply = (a, b) => a * b;
int product = multiply(4, 5); // product = 20
Console.WriteLine(product);

在这个例子中,我们使用Lambda表达式定义了一个乘法操作,并将其赋值给MathOperation委托

2.2 LINQ查询与Lambda表达式

Lambda表达式LINQ查询的核心,它使得数据操作更加直观和高效。例如:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
Console.WriteLine(string.Join(", ", evenNumbers)); // 输出: 2, 4

在这个例子中,我们使用Lambda表达式筛选出列表中的偶数。

2.3. 事件处理与Lambda表达式

Lambda表达式可以用于简化事件处理程序的编写。例如:

button.Click += (sender, e) => Console.WriteLine("Button clicked!");

在这个例子中,我们使用Lambda表达式定义了一个按钮点击事件的处理程序。

3.Lambda表达式的实际示例
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{

    // 定义一个委托
    public delegate int MathOperation(int a, int b);
    
    static void Main(string[] args)
    {
        // 无参数的Lambda表达式
        Action sayHello = () => Console.WriteLine("Hello, World!");
        sayHello();

        // 带一个参数的Lambda表达式
        Action<string> greet = name => Console.WriteLine($"Hello, {name}!");
        greet("Alice");

        // 带多个参数的Lambda表达式
        Func<int, int, int> add = (a, b) => a + b;
        int result = add(3, 5);
        Console.WriteLine($"3 + 5 = {result}");

        // 带语句块的Lambda表达式
        Action<int, int> printSum = (a, b) =>
        {
            int sum = a + b;
            Console.WriteLine($"Sum of {a} and {b} is {sum}");
        };
        printSum(10, 20);

        // 在LINQ中使用Lambda表达式
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
        var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
        Console.WriteLine("Even numbers: " + string.Join(", ", evenNumbers));

        // 在委托中使用Lambda表达式
        MathOperation multiply = (a, b) => a * b;
        int product = multiply(4, 5);
        Console.WriteLine($"4 * 5 = {product}");
    }

}

http://www.kler.cn/a/465384.html

相关文章:

  • 使用FDBatchMove的几个问题总结
  • kernel32.dll动态链接库报错要怎解决?详细解析kernel32.dll文件缺失解决方案
  • vue3 拆信封动画
  • 数学建模入门——建模流程
  • Scala_【4】流程控制
  • 蓝桥杯备赛:C++基础,顺序表和vector(STL)
  • springboot3+vue项目实践-黑马
  • 力扣-数据结构-7【算法学习day.78】
  • 周末总结(2024/12/28)
  • 解決當前IP地址僅適用於本地網路
  • 在 Blazor 和 ASP.NET Core 中使用依赖注入和Scoped 服务实现数据共享方法详解
  • Elasticsearch检索之三:官方推荐方案search_after检索实现(golang)
  • 【SpringBoot教程】IDEA快速搭建正确的SpringBoot版本和Java版本的项目
  • PCA降维算法详细推导
  • UE5材质节点Camera Vector/Reflection Vector
  • 2024-12-29-sklearn学习(26)模型选择与评估-交叉验证:评估估算器的表现 今夜偏知春气暖,虫声新透绿窗纱。
  • 【MySQL】通过 Binlog 恢复MySQL数据
  • 解决Docker国内网络问题
  • Yeelight易来与Control4达成战略合作,开启智能家居全球战略新篇
  • Servlet中配置和使用过滤器
  • 《Vue3实战教程》40:Vue3安全
  • k8s启动报错
  • 华为仓颉编程语言与医疗领域的深度融合:技术与实践
  • android studio android sdk下载地址
  • matlab 实现了一个基于阵列信号处理的空间角和极化参数估计系统
  • 【2024年-8月-29日-开源社区openEuler实践记录】A - Ops:智能运维新时代的开源利器