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 printMsg;

// 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 OrderFinished;

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();
}
}

posted @ 2026-04-03 19:04  菜鸟的奋斗军  阅读(14)  评论(0)    收藏  举报