全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C# Action和Func的区别 - 通用委托的实际应用

Action 无返回值,用于执行操作;Func 有返回值,用于计算结果。二者在事件处理、LINQ、回调和行为注入等场景中各司其职,提升代码简洁性与可维护性。

和func的区别 - 通用委托的实际应用">

ActionFunc 是 C# 中两个常用的泛型委托,它们都用于封装方法,但用途和结构不同。理解它们的区别并掌握实际应用场景,有助于写出更简洁、可维护的代码。

基本定义与返回值差异

Action 和 Func 最核心的区别在于是否具有返回值:

  • Action 代表一个接受一个参数(类型为 T)且没有返回值的委托,即返回类型为 void
  • Func 代表一个接受一个参数(类型为 T)并返回指定类型(TResult)结果的委托。

例如:

Action print = s => Console.WriteLine(s);
print("Hello"); // 输出:Hello


Func square = x => x * x;
int result = square(5); // result = 25

常见使用场景对比

两者在实际开发中广泛应用于事件处理、集合操作、依赖注入等场景。

Action 的典型应用:

  • 执行某种操作而不关心结果,比如日志记录、消息通知。
  • 作为回调函数传递给其他方法,例如集合遍历中的 List.ForEach(action)
var names = new List { "Alice", "Bob" };
names.ForEach(name => Console.WriteLine($"Hello, {name}"));


Func 的典型应用:

  • 需要对输入进行转换或计算后返回结果,比如数据映射、条件判断。
  • LINQ 查询中大量使用 Func,如 WhereSelect 等。
var numbers = new List { 1, 2, 3, 4 };
var squares = numbers.Select(x => x * x).ToList(); // 使用 Func

灵活应对多参数情况

这两个委托都有多个泛型重载版本:

  • Action 支持最多 16 个参数的重载(如 Action),但始终无返回值。
  • Func 同样支持多个输入参数,最后一个类型参数始终是返回类型,例如 Func 表示两个 int 输入,返回 bool。

例如:

Action logEntry = (msg, level) => Console.WriteLine($"[{level}] {msg}");
logEntry("Error occurred", 3);


Func formatMsg = (s, n) => $"{s}: {n} times";
string output = formatMsg("Clicked", 5); // "Clicked: 5 times"

在自定义方法中使用委托提升灵活性

将 Action 或 Func 作为参数传入方法,可以实现行为的动态注入,增强代码复用性。

void ProcessData(List data, Action onItemProcessed, Func filter)
{
    foreach (var item in data)
    {
        if (filter(item))
        {
            onItemProcessed(item);
        }
    }
}


调用时可根据需要传入不同的逻辑:

ProcessData(numbers,
    item => Console.WriteLine($"Processing {item}"),
    x => x % 2 == 0 // 只处理偶数 );

基本上就这些。Action 适合“做点事”,Func 适合“算个结果”。合理选用能让代码更清晰、更具扩展性。


# c#  # 回调函数  # 区别  # 代码复用  # red  # print  # String  # if  # foreach  # 封装  # select  # Error  # Filter  # bool  # int  # void  # 委托  # 泛型  # var  # console  # 事件  # linq  # 返回值  # 多个  # 回调  # 实际应用  # 都有  # 最多  # 各司其职  # 遍历  # 而不  # 这两个 


相关文章: python的本地网站制作,如何创建本地站点?  建站之星导航如何优化提升用户体验?  建站之星代理如何优化在线客服效率?  如何快速生成橙子建站落地页链接?  c++怎么用jemalloc c++替换默认内存分配器【性能】  广德云建站网站建设方案与建站流程优化指南  C++时间戳转换成日期时间的步骤和示例代码  制作网站外包平台,自动化接单网站有哪些?  如何在景安云服务器上绑定域名并配置虚拟主机?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  如何在服务器上三步完成建站并提升流量?  建站之星如何快速生成多端适配网站?  网站专业制作公司有哪些,做一个公司网站要多少钱?  公众号网站制作网页,微信公众号怎么制作?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  网站制作话术技巧,网站推广做的好怎么话术?  jQuery 常见小例汇总  C++如何编写函数模板?(泛型编程入门)  大型企业网站制作流程,做网站需要注册公司吗?  网页设计网站制作软件,microsoft office哪个可以创建网页?  ,有什么在线背英语单词效率比较高的网站?  建站之星安装失败:服务器环境不兼容?  如何在IIS中新建站点并配置端口与物理路径?  制作公司内部网站有哪些,内网如何建网站?  制作证书网站有哪些,全国城建培训中心证书查询官网?  如何高效生成建站之星成品网站源码?  建站上传速度慢?如何优化加速网站加载效率?  山东云建站价格为何差异显著?  微信小程序 input输入框控件详解及实例(多种示例)  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何通过虚拟主机快速搭建个人网站?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  北京企业网站设计制作公司,北京铁路集团官方网站?  网站制作报价单模板图片,小松挖机官方网站报价?  如何快速搭建响应式可视化网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何高效搭建专业期货交易平台网站?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  电商网站制作价格怎么算,网上拍卖流程以及规则?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何通过FTP空间快速搭建安全高效网站?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  企业微网站怎么做,公司网站和公众号有什么区别?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  建站主机是否属于云主机类型?  香港服务器租用费用高吗?如何避免常见误区?  Python多线程使用规范_线程安全解析【教程】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。