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

相关推荐
Victor3561 小时前
Redis(25)Redis的RDB持久化的优点和缺点是什么?
后端
Victor3561 小时前
Redis(24)如何配置Redis的持久化?
后端
ningqw8 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友8 小时前
vi编辑器命令常用操作整理(持续更新)
后端
胡gh9 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫10 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong10 小时前
技术人如何对客做好沟通(上篇)
后端
颜如玉10 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源
Moment11 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源
why技术11 小时前
在我眼里,这就是天才般的算法!
后端·面试