C#中Lambda表达式‌的详细说明和用法

14 阅读2分钟

一、Lambda 表达式的作用 Lambda 表达式是一种匿名函数的简洁写法,用于快速定义委托、事件或 LINQ 查询等场景。它能替代传统的匿名方法,使代码更简洁。

二、基础语法 Lambda 表达式语法:(参数) => 表达式或代码块

示例 1:无参数 AI检测代码解析 // 传统写法 Action printHello = delegate { Console.WriteLine("Hello"); };

// Lambda 写法 Action printHelloLambda = () => Console.WriteLine("Hello");

示例 2:单参数 AI检测代码解析 // 传统写法 Func<int, int> square = delegate (int x) { return x * x; };

// Lambda 写法 Func<int, int> squareLambda = x => x * x;

示例 3:多参数 AI检测代码解析 // 传统写法 Func<int, int, int> add = delegate (int a, int b) { return a + b; };

// Lambda 写法 Func<int, int, int> addLambda = (a, b) => a + b;

三、常见应用场景

  1. 集合操作(LINQ) AI检测代码解析 List numbers = new List { 1, 2, 3, 4, 5 };

// 筛选偶数 var evenNumbers = numbers.Where(n => n % 2 == 0);

// 转换为平方 var squares = numbers.Select(x => x * x); 1. 2. 3. 4. 5. 6. 7. 2. 事件处理 AI检测代码解析 button.Click += (sender, e) => { MessageBox.Show("Button clicked!"); };

  1. 委托简化 AI检测代码解析 // 定义一个委托 public delegate int MathOperation(int a, int b);

// 使用 Lambda 实现 MathOperation multiply = (a, b) => a * b; int result = multiply(3, 4); // 返回 12 1. 2. 3. 4. 5. 6. 四、多行代码块 如果逻辑复杂,可以使用 { } 包裹代码块:

AI检测代码解析 Func<int, int, string> compare = (a, b) => { if (a > b) return "a大于b";elseif(a<b)return"{a} 大于 {b}"; else if (a < b) return "{a} 小于 {b}"; else return $"{a} 等于 {b}"; };

Console.WriteLine(compare(5, 3)); // 输出 "5 大于 3"

五、与委托类型的对应 Lambda 表达式通常与以下类型配合使用:

Action:无返回值的方法委托(最多 16 参数)。 Func:有返回值的方法委托(最后一个泛型参数为返回值类型)。 示例: AI检测代码解析 // Action(无返回值) Action log = message => Console.WriteLine($"[LOG] {message}");

// Func(有返回值) Func<int, int, bool> isEqual = (a, b) => a == b;

六、注意事项 类型推断:Lambda 参数类型通常可省略(除非编译器无法推断)。 AI检测代码解析 // 明确指定类型 Func<int, int, int> add = (int a, int b) => a + b;

闭包问题:Lambda 会捕获外部变量(可能导致意外行为)。 AI检测代码解析 int factor = 2; Func<int, int> multiplier = x => x * factor; factor = 3; // 后续调用 multiplier(5) 会返回 15

七、完整示例 AI检测代码解析 using System; using System.Collections.Generic; using System.Linq;

class Program { static void Main() { // 示例 1:集合筛选 List numbers = new List { 1, 2, 3, 4, 5 }; var filtered = numbers.Where(n => n > 3); // 4, 5

    // 示例 2:自定义委托
    Func<string, string> greet = name => $"Hello, {name}!";
    Console.WriteLine(greet("Alice")); // 输出 Hello, Alice!

    // 示例 3:多行 Lambda
    Action<int, int> printMax = (a, b) =>
    {
        int max = a > b ? a : b;
        Console.WriteLine($"最大值是 {max}");
    };
    printMax(10, 20); // 输出 最大值是 20
}

}

总结 场景

Lambda 写法

传统写法

单行表达式

x => x * x

delegate(int x) { ... }

多行代码块

(a, b) => { ... }

匿名方法 + 代码块

集合操作(LINQ)

Where(n => n % 2 == 0)

循环 + 条件判断

Lambda 表达式是 C# 中提升代码可读性和简洁性的重要工具,熟练掌握后可大幅简化代码! 文章来源:ximaonetwork.cn