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

相关推荐
用户8356290780518 分钟前
使用 Python 在 PDF 中创建与管理书签
后端·python
Nturmoils8 分钟前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
大志说编程9 分钟前
Agent面试真题06: 十分钟带你快速掌握Agent记忆管理高频面试题(附详细答案)
后端·面试·ai编程
ServBay22 分钟前
Claude Code 被曝植入后门,AI 时代如何安全打造本地 DevOps
后端·ai编程·claude
王二端茶倒水36 分钟前
从千兆到万兆:宽带运营不能只卖套餐,要管用户生命周期从千兆到万兆:宽带运营需要管理用户生命周期
后端·网络协议·架构
网易云信1 小时前
重磅认证!网易智企智能融合通信获鸿蒙生态权威认可,斩获「Harmony Trusted SDK」认证
人工智能·后端·aigc
神奇小汤圆2 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
后端
神奇小汤圆2 小时前
面试官:你们项目里的线程池是怎么用的?怎么管理的?
后端
网易云信2 小时前
网易智企IM Web体验馆:一站式在线体验即时通讯
人工智能·后端·aigc