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

相关推荐
间彧1 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧1 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧1 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧1 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧1 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng2 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
烙印6013 小时前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring
Lisonseekpan3 小时前
Guava Cache 高性能本地缓存库详解与使用案例
java·spring boot·后端·缓存·guava
4 小时前
JUC专题 - 并发编程带来的安全性挑战之同步锁
后端
凯哥19704 小时前
迁移PostgreSQL数据库教程
后端