C# Lambda 表达式
最基础语法:
(参数) => { 要执行的代码 }
符号 => 读作:goes to / 去做
using System;
class Program
{
static void Main()
{
// 定义一个委托,代表“无参数无返回值的方法”
Action sayHi;
// 把 Lambda 赋值给委托
// () 表示没有参数
// => goes to
// {} 里面是要执行的代码
sayHi = () => {
Console.WriteLine("你好呀!");
};
// 调用这个委托(相当于执行 Lambda 里的代码)
sayHi();
}
}
Action sayHi;定义一个 “能存无参无返回方法” 的变量。
sayHi = () => { ... }把一个匿名小方法塞进 sayHi。
():没有参数
=>:去执行
{ ... }:要做的事
sayHi();
带一个参数的 Lambda
using System;
class Program
{
static void Main()
{
// 定义:接收一个 string 参数
Action
// Lambda:参数 name => 执行代码
printMsg = (string name) => {
Console.WriteLine("欢迎你:" + name);
};
// 调用
printMsg("张三");
}
}
(string name):传入参数
=>:拿到 name 后去执行
大括号里就是方法体
甚至可以更简单:类型可以省略
printMsg = (name) => {
Console.WriteLine("欢迎你:" + name);
};
还能更简单:只有一个参数时,括号也能省
printMsg = name => {
Console.WriteLine("欢迎你:" + name);
};
用 Func 委托,最后一个类型是返回值。
using System;
class Program
{
static void Main()
{
// Func<int, int, int>:两个 int 参数,返回 int
Func<int, int, int> add;
// Lambda:(a,b) => a + b;
// 只有一行 return 时,可以省略 {} 和 return
add = (a, b) => a + b;
// 调用
int sum = add(3, 5);
Console.WriteLine(sum); // 输出 8
}
}
Lambda 直接用在事件里
using System;
public class Button
{
// 点击事件
public event Action Click;
public void OnClick()
{
Click?.Invoke();
}
}
class Program
{
static void Main()
{
Button btn = new Button();
// 传统写法:要单独写一个方法
// btn.Click += OnButtonClick;
// Lambda 写法:直接写逻辑!
btn.Click += () => {
Console.WriteLine("按钮被点击了!");
};
// 模拟点击
btn.OnClick();
}
}
btn.Click += () => { ... }
直接把一段代码绑到事件上
不用额外写方法!
带参数的事件 + Lambda
using System;
public class Order
{
public event Action
public void Finish()
{
OrderFinished?.Invoke("ORDER_123");
}
}
class Program
{
static void Main()
{
Order order = new Order();
// Lambda 直接接收参数 orderId
order.OrderFinished += (orderId) => {
Console.WriteLine("订单完成:" + orderId);
};
order.Finish();
}
}

浙公网安备 33010602011771号