C#中的Lambda表达式应用方式及场景

这篇具有很好参考价值的文章主要介绍了C#中的Lambda表达式应用方式及场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Lambda表达式在C#中提供了一种更简洁、灵活的方式来定义匿名函数,并在多种场景下提供了更好的代码编写体验。通过使用Lambda表达式,您可以减少冗余代码,并以更直观和简洁的方式表达函数的逻辑。

当使用C#中的Lambda表达式时,有多种应用方式和应用场景。 下面我将详细介绍Lambda表达式在C#中的各种应用方式及应用场景:

  •  LINQ查询

Lambda表达式广泛用于LINQ查询。它们用于定义查询条件、排序规则和投影操作,使得查询逻辑更简洁。通过Lambda表达式,您可以直接在LINQ查询中编写逻辑,而无需显式定义匿名函数。 

// 使用Lambda表达式进行筛选
var filtered = numbers.Where(x => x % 2 == 0);

// 使用Lambda表达式进行投影
var projected = numbers.Select(x => x * 2);

// 使用Lambda表达式进行排序
var sorted = numbers.OrderBy(x => x);
  • 高阶函数 

 Lambda表达式使C#支持高阶函数,即函数接受一个或多个函数作为参数或返回一个函数。通过Lambda表达式,您可以方便地创建和传递匿名函数,以及进行函数组合和柯里化操作。

// 创建高阶函数
Func<int, Func<int, int>> curriedAdd = x => y => x + y;

// 函数组合
Func<int, int> addOne = x => x + 1;
Func<int, int> multiplyByTwo = x => x * 2;
Func<int, int> composed = addOne.Compose(multiplyByTwo);

// 柯里化
Func<int, int, int> add = (x, y) => x + y;
Func<int, Func<int, int>> curriedAdd = x => y => add(x, y);
  • 事件处理

 Lambda表达式可用于简化事件处理的代码。通过Lambda表达式,您可以直接定义事件处理程序,而无需显式编写命名方法。

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

// 使用条件语句的Lambda表达式
button.Click += (sender, e) =>
{
    if (e.Button == MouseButton.Left)
    {
        Console.WriteLine("Left button clicked");
    }
    else if (e.Button == MouseButton.Right)
    {
        Console.WriteLine("Right button clicked");
    }
};
  • 并行编程

Lambda表达式可用于并行编程中的任务和并行循环。通过Lambda表达式,您可以以更简洁的方式定义并行任务和循环体。 

// 并行任务
Task.Run(() => DoSomethingAsync());

// 并行循环
Parallel.For(0, 10, i => Console.WriteLine(i));

Parallel.ForEach(numbers, n => Console.WriteLine(n));
  •  委托和事件

Lambda表达式可以用作委托类型的实例,以便传递给其他方法或在事件中使用。 

Action<int> printNumber = x => Console.WriteLine(x);

Func<int, int, int> sum = (x, y) => x + y;

EventHandler clickHandler = (sender, e) => Console.WriteLine("Clicked");

  •  异步 lambda

在C#中,异步Lambda表达式可以与异步方法(使用async关键字修饰的方法)一起使用,以便在异步操作中执行相应的逻辑。通过将async修饰符与Lambda表达式结合使用,您可以在表达式中使用异步操作、异步等待和异步返回。 

// 异步Lambda表达式示例
Func<int, Task<int>> asyncAdd = async x =>
{
    await Task.Delay(1000);  // 模拟异步操作
    return x + 1;
};

// 在异步方法中调用异步Lambda表达式
async Task RunAsyncLambda()
{
    int result = await asyncAdd(2);
    Console.WriteLine(result);
}

// 调用异步方法
RunAsyncLambda().Wait();

异步Lambda表达式常用于需要在异步上下文中执行逻辑的场景,如使用异步LINQ查询、异步事件处理、异步任务和异步循环等。通过使用异步Lambda表达式,您可以更方便地编写和管理异步操作,以及处理异步代码的结果。 

------------------------------ 

从 C# 10 开始,Lambda 表达式可能具有自然类型。 编译器不会强制你为 Lambda 表达式声明委托类型(例如 Func<...> 或 Action<...>),而是根据 Lambda 表达式推断委托类型 

// 自然类型的Lambda表达式示例
int[] numbers = { 1, 2, 3, 4, 5 };

// 无需显式声明委托类型
var evenNumbers = numbers.Where(n => n % 2 == 0);

// 输出结果
foreach (var number in evenNumbers)
{
    Console.WriteLine(number);
}

以下是C#中使用Lambda表达式的一些示例: 

// 使用Lambda表达式定义一个简单的加法函数
Func<int, int, int> add = (x, y) => x + y;

// 调用Lambda函数
int result = add(2, 3);
Console.WriteLine(result);  // 输出:5

// 将Lambda表达式作为参数传递给高阶函数
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
List<int> squared = numbers.Select(x => x * x).ToList();
Console.WriteLine(string.Join(", ", squared));  // 输出:1, 4, 9, 16, 25

 文章来源地址https://www.toymoban.com/news/detail-527431.html

到了这里,关于C#中的Lambda表达式应用方式及场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c#中lambda表达式缩写推演

     

    2024年02月12日
    浏览(25)
  • C# 匿名方法和Lambda表达式

    1.匿名方法的演变 匿名方法是为了简化委托的实现,方便调用委托方法而出现的,同时,匿名方法也是学好lambda表达式的基础。在委托调用的方法中,如果方法只被调用一次,这个时候我们就没有必要创建具名方法,从而用匿名方法更为方便。 下面一段代码是声明并使用了一

    2024年02月15日
    浏览(28)
  • C# LINQ和Lambda表达式对照

    Linq语法: Lamda语法: sql语法: Linq语法: Lamda语法: sql语法: Linq语法: Lamda语法: sql语法: ​ Linq语法: Lamda语法: sql语法: ​ Linq语法: Lamda语法: sql语法: ​ Linq语法: Lamda语法: sql语法: Linq语法: Lamda语法: sql语法: ​ Linq语法: Lamda语法: EF Core中的写法:

    2024年02月16日
    浏览(28)
  • 【C# Programming】委托和lambda表达式、事件

    目录 一、委托和lambda表达式 1.1 委托概述 1.2 委托类型的声明 1.3 委托的实例化 1.4 委托的内部机制  1.5 Lambda 表达式 1.6 语句lambda 1.7 表达式lambda 1.8 Lambda表达式 1.9 通用的委托 1.10 委托没有结构相等性 1.11 Lambda表达式和匿名方法的内部机制 1.12 外部变量 1.13 外部变量的

    2024年02月06日
    浏览(33)
  • QT中的lambda表达式

    面是对Qt中在QObject::connect()中的lambda表达式常用用法 QString str(\\\"I am a string!\\\"); device=str; connect(ui- PushButton::clicked,[](bool){qDebug()\\\"device==\\\"device;}); 表达式详解 a1 第一个参数含义 第一个参数ui-pushButton:表示对象; a2 第二个参数含义 第二个参数QPushButton::clicked:表示对象包含的信号(

    2024年02月04日
    浏览(34)
  • Java中的lambda表达式

    目录 一、背景 二、lambada表达式的基本使用 三、变量捕获 四、lambda在集合中的使用(map和set) 五、优缺点 一、背景 (1)、lambda表达式的定义: (2)、lambda表达式的语法: (3)、函数式接口 二、lambada表达式的基本使用 (1)没有使用lambda表达式,简单调用函数式接口展

    2024年02月08日
    浏览(37)
  • C++ 中的Lambda表达式

    Lambda 表达式 (lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是 一个匿名函数,即没有函数名的函数 。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。 闭包 就是能够读取其他函数内部变量

    2024年02月09日
    浏览(36)
  • C#学习相关系列之匿名方法和Lambda表达式

            匿名方法 顾名思义就是这类方法的特点是不需要特别去定义函数的名字的。一般我们需要一个函数,但又不想花时间去命名它的时候,就可以使用匿名方法。在 C# 中, 匿名方法通常表现为使用 delegate 运算符和 Lambda 表达式。( Lambda 表达式 的本质也是 匿名方法

    2024年02月07日
    浏览(38)
  • 探索Python中的函数式编程:Lambda表达式与函数式工具【第135篇—Lambda表达式】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Python编程世界中,函数式编程逐渐成为了一种流行的范式,特别是在处理数据和编写简洁、高效代码时。函数式编程的核心思想是将计算视

    2024年04月08日
    浏览(69)
  • 浅谈 Java 中的 Lambda 表达式

    更好的阅读体验 huge{color{red}{更好的阅读体验}} 更好的阅读体验 Lambda 表达式是一种匿名函数,它可以作为参数传递给方法或存储在变量中。在 Java8 中,它和函数式接口一起,共同构建了函数式编程的框架。 函数式编程是一种编程范式,也是一种思想。 它将计算视为函数求

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包