C#-Lambda

C# Lambda 表达式书写指南 📝

Lambda 表达式是 C# 中用于简化匿名方法的核心语法,其核心结构为 参数 => 表达式/语句块。以下是其详细书写方式及常见场景:


一、基础结构:参数与运算符

Lambda 表达式由 参数列表=> 运算符和 表达式/语句块 三部分组成: • 参数列表 :位于 => 左侧,可以是零或多个参数。 • 运算符=> 读作"goes to",分隔参数与逻辑。 • 表达式/语句块 :右侧为单行表达式(自动返回值)或多行语句块(需显式 return)。

示例

csharp 复制代码
// 表达式形式(单行)
Func<int, int> square = x => x * x; 

// 语句块形式(多行)
Action<string> log = msg => {
    string timestamp = DateTime.Now.ToString();
    Console.WriteLine($"[{timestamp}] {msg}");
};

二、参数处理规则 🎯

  1. 无参数 :必须使用空括号 ()

    csharp 复制代码
    Action sayHello = () => Console.WriteLine("Hello!");  // 
  2. 单参数:括号可省略,类型可推断。

    csharp 复制代码
    Func<string, int> getLength = s => s.Length;  // 
  3. 多参数:需用逗号分隔,类型可显式声明或推断。

    csharp 复制代码
    Func<int, int, bool> equal = (a, b) => a == b;          // 推断类型 
    Func<int, string, bool> check = (int x, string s) => s.Length > x;  // 显式类型 
  4. 弃元参数 :用 _ 忽略不需要的参数(常见于事件处理)。

    csharp 复制代码
    button.Click += (_, e) => Console.WriteLine("点击事件");  // 

三、表达式与语句块的区别 📦

  1. 表达式 Lambda

    单行代码,直接返回值,无需 return 关键字:

    csharp 复制代码
    Func<int, bool> isEven = x => x % 2 == 0;  // 
  2. 语句 Lambda

    多行逻辑需用 {} 包裹,显式使用 return(若有返回值):

    csharp 复制代码
    Func<int, int> complexCalc = x => {
        int temp = x * 2;
        return temp + 10;  // 显式返回 
    };

四、常见应用场景 🌟

  1. 委托赋值

    直接赋值给 Func(有返回值)或 Action(无返回值):

    csharp 复制代码
    Func<int, int, int> add = (a, b) => a + b;  // 
    Action<string> print = s => Console.WriteLine(s);
  2. LINQ 查询

    作为条件筛选、转换等逻辑的委托参数:

    csharp 复制代码
    var numbers = new[] { 1, 2, 3 };
    var odds = numbers.Where(n => n % 2 == 1);  // 筛选奇数 
  3. 事件处理

    简化事件订阅逻辑,支持异步操作:

    csharp 复制代码
    button.Click += async (sender, e) => {
        await LoadDataAsync();  // 异步操作 
    };
  4. 方法参数

    直接作为参数传递给高阶函数:

    csharp 复制代码
    List<int> numbers = new List<int> { 1, 2, 3 };
    numbers.ForEach(n => Console.WriteLine(n));  // 遍历输出 

五、注意事项 ⚠️

  1. 类型推断:编译器会根据上下文自动推断参数类型,但复杂场景需显式指定。
  2. 闭包问题:Lambda 捕获外部变量时可能引发闭包副作用(如循环变量捕获)。
  3. 简写规则
    • 参数类型可省略(如 (x, y) => x + y)。 • 单参数可省略括号(如 x => x * x)。 • 单行表达式可省略 {}return

总结 🚀

Lambda 表达式的书写位置灵活,常见于 委托赋值、LINQ 查询、事件处理 等场景。核心原则是:左侧定义参数,右侧编写逻辑。通过合理利用类型推断和简写规则,可大幅提升代码简洁性。尝试在项目中用 Lambda 替换传统循环或匿名方法,体验其高效与优雅!

相关推荐
山枕檀痕4 分钟前
Spring Boot中LocalDateTime接收“yyyy-MM-dd HH:mm:ss“格式参数的最佳实践
java·spring boot·后端
Java水解8 分钟前
【Spring Boot 单元测试教程】从环境搭建到代码验证的完整实践
后端·spring
Lear12 分钟前
【JavaSE】动态代理技术详解与案例实战
后端
shark_chili30 分钟前
深入剖析Java并发编程中的死锁问题
后端
开心就好202531 分钟前
iOS 压力测试的工程化体系 构建多工具协同的极限稳定性验证方案
后端
深紫色的三北六号1 小时前
Quartz 定时任务持久化(重启后自动恢复)
后端
我是天龙_绍1 小时前
@PathVariable 和 @RequestParam 的区别
后端
小垣1 小时前
40亿QQ号,不超过1G内存,如何去重?
后端
JavaGuide1 小时前
京东零售后端一二面,附参考答案!
java·后端
开始学java1 小时前
ArrayList容器类
后端