请解释 C# 中 Lambda 表达式的含义,并说明其典型应用场景及基本使用方式。
考察说明
考查对 C# Lambda 表达式概念和实际应用的理解。
回答思路
- 【回答框架 1】Lambda 表达式是 C# 中一种匿名函数,可以包含表达式和语句,常用于创建委托或表达式树类型。其基本语法为 (输入参数) => 表达式或语句块,其中 => 为 lambda 运算符,读作 goes to。
- 【回答框架 2】Lambda 表达式主要用作 LINQ 查询中的谓词或投影,例如 Where 方法中的条件筛选、Select 方法中的字段提取,也可以用于事件处理、任务并行库等需要委托或表达式的场景。
- 【回答框架 3】它简化了委托实例的创建,使代码更简洁、可读。在用法上,可分为表达式 lambda(表达式作为主体)和语句 lambda(语句块作为主体),表达式 lambda 可转换为表达式树,实现延迟执行或动态查询。
- 【回答框架 4】使用 Lambda 时需注意变量捕获问题:lambda 可以捕获外部变量,但可能导致闭包行为,在循环中捕获循环变量时需注意变量的最终值。此外,性能上频繁使用复杂 lambda 可能影响可读性。
- 【关键点 1】Lambda 是匿名函数,基于委托或表达式树。
- 【关键点 2】语法为核心 (参数) => 表达式或语句块。
- 【关键点 3】常用于 LINQ、事件处理及委托赋值。
- 【关键点 4】表达式 lambda 可生成表达式树,支持延迟查询。
- 【关键点 5】注意闭包对捕获变量的影响,以及避免过度使用影响可读性。
- 【易错点 1】在循环中捕获循环变量时,C# 5.0 之前会共享同一变量,导致最终值一致,需复制局部变量来避免。
- 【易错点 2】将 lambda 用于表达式树时,语句 lambda 无法转换为表达式树,只能转换表达式 lambda。
- 【易错点 3】lambda 中的变量捕获可能延长变量生命周期,导致资源不能及时释放。