首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C#的 Lambda 表达式

C#的 Lambda 表达式

原创
作者头像
Michel_Rolle
发布2024-10-09 21:40:30
发布2024-10-09 21:40:30
4.5K0
举报
文章被收录于专栏:c#分享专栏c#分享专栏

Lambda 表达式是 C# 语言中一种非常强大的特性,它允许开发者以简洁的方式表示匿名函数。自 C# 3.0 发布以来,Lambda 表达式已经成为编写清晰、可读且功能强大的代码的关键工具。本文将深入探讨 Lambda 表达式的基本概念、语法、应用场景以及在现代 C# 开发中的一些高级用法。

什么是 Lambda 表达式?

Lambda 表达式是一种匿名函数,即没有名称的函数。它允许你将函数作为方法的参数传递,或者在需要时创建函数对象。Lambda 表达式通常用于委托、表达式树和 LINQ 查询。

Lambda 表达式的语法

Lambda 表达式的一般形式如下:

代码语言:javascript
复制
(input parameters) => expression

或者,如果需要多条语句:

代码语言:javascript
复制
(input parameters) => { statement block }

参数

Lambda 表达式可以有零个或多个参数。参数可以是输入参数,也可以是输出参数(例如,用于 LINQ 查询)。

表达式与语句块

Lambda 表达式可以返回一个表达式的结果,也可以包含一个语句块。如果 Lambda 表达式只包含一个表达式,它会隐式返回该表达式的结果。如果包含多个语句,必须显式返回一个值。

Lambda 表达式的应用

委托

委托是 C# 中定义的类型,它定义了方法的类型。Lambda 表达式可以赋值给委托类型的变量。

代码语言:javascript
复制
Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // 输出 25

事件

Lambda 表达式可以用于订阅事件。

代码语言:javascript
复制
button.Click += (sender, e) => Console.WriteLine("Button clicked!");

LINQ 查询

Lambda 表达式在 LINQ 查询中非常有用,尤其是在使用 WhereSelectOrderBy 等方法时。

代码语言:javascript
复制
var evenNumbers = numbers.Where(n => n % 2 == 0);

高级用法

表达式树

Lambda 表达式可以被转换成表达式树,这是一种数据结构,表示代码中的表达式。

代码语言:javascript
复制
Expression<Func<int, bool>> predicate = x => x > 10;

表达式树在编译时不会执行,而是可以被进一步分析或转换为其他形式,例如 SQL 查询。

异步 Lambda 表达式

在 C# 5.0 之后,Lambda 表达式可以与 asyncawait 关键字一起使用,以支持异步操作。

代码语言:javascript
复制
async Task<int> GetResultAsync() => await Task.Run(() => CalculateResult());

局部函数

在 C# 7.0 中引入的局部函数允许在 Lambda 表达式中定义局部函数。

代码语言:javascript
复制
Func<int, int> square = x =>
{
    int ComputeSquare(int y) => y * y;
    return ComputeSquare(x);
};

可空引用类型

在 C# 8.0 中引入的可空引用类型特性与 Lambda 表达式结合使用,可以提高代码的安全性。

代码语言:javascript
复制
Func<string?, bool> isNullOrEmpty = s => string.IsNullOrEmpty(s);

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 Lambda 表达式?
  • Lambda 表达式的语法
    • 参数
    • 表达式与语句块
  • Lambda 表达式的应用
    • 委托
    • 事件
    • LINQ 查询
  • 高级用法
    • 表达式树
    • 异步 Lambda 表达式
    • 局部函数
    • 可空引用类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档