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 替换传统循环或匿名方法,体验其高效与优雅!

相关推荐
一 乐19 小时前
农产品销售系统|农产品电商|基于SprinBoot+vue的农产品销售系统(源码+数据库+文档)
java·javascript·数据库·vue.js·spring boot·后端·农产品销售系统
蒲公英源码19 小时前
java企业OA自动化办公源码
java·spring boot·后端
go4it19 小时前
聊聊spring-boot-autoconfigure的模块化
后端
鬼火儿19 小时前
集成RabbitMQ+MQ常用操作
java·后端
Merrick20 小时前
Java 方法参数默认值新方案:使用DefArgs!
java·后端
IT_陈寒20 小时前
Python数据处理速度慢?5行代码让你的Pandas提速300% 🚀
前端·人工智能·后端
程序员小假20 小时前
finally 释放的是什么资源?
java·后端
技术砖家--Felix20 小时前
Spring Boot配置篇:详解application.properties和application.yml
java·spring boot·后端
用户214118326360220 小时前
Claude+Codex协同开发,让AI编程效率翻倍成本直降近半
后端
帧栈20 小时前
SpringBoot + iTextPDF + Acrobat 构建动态PDF表单的完整实践
spring boot·后端·pdf