C#匿名委托与Lambda表达式详解

发布时间 - 2026-01-11 03:03:14    点击率:

通过使用匿名委托(匿名方法),使编程变得更加灵活,有关委托与匿名委托请参考我的前一篇Blog《委托与匿名委托》。

继续之前示例,代码如下:

static void Main(string[] args)
{

  Worker.TwoNumberHandleMethodDelegate method = delegate(int a, int b)
 {
  return a + b;
 };
  Worker worker = new Worker();
  int result = worker.HandleTwoNumber(10, 10,method);

  Console.WriteLine(String.Format("Result:{0}", result));

  Console.ReadLine();
}

上述程序worker将按照Main给定的参数与计算方式(method),计算出结果返回。根据等效性代码可以进一步简化,如下:

 static void Main(string[] args)
 {
  Worker worker = new Worker();
  int result = worker.HandleTwoNumber(10, 10, delegate (int a, int b)
  {
  return a + b;
  });

  Console.WriteLine(String.Format("Result:{0}", result));

  Console.ReadLine();
 }

看到此处有过js、jquery开发经验的朋友可能会突感亲切,哦...匿名函数。在jquery中到处都用的$("#id").click(function(){.........})。

C#中对于匿名委托在使用时可以进一步精简,再精简的结果就变成了表达式,称为Lambda表达式。

static void Main(string[] args)
 {

  Worker.TwoNumberHandleMethodDelegate method = delegate(int a, int b)
 {
  return a + b;
 };
}

Lambda表达式表述:

static void Main(string[] args)
 {

  Worker.TwoNumberHandleMethodDelegate method = (a, b)=>
 {
  return a + b;
 };
}

C# Lambda表达式使用 => 分为前后两部分,(a, b) 为参数列表,{....}为方法体。

 static void Main(string[] args)
 {
  Worker worker = new Worker();
  int result = worker.HandleTwoNumber(10, 10, (a, b) =>
  {
  return a + b;
  });

  Console.WriteLine(String.Format("Result:{0}", result));

  Console.ReadLine();
 }

下面给出方法与Lambda表达式转换对照

private void A1()
  {
   Console.WriteLine("....");
  }
//Lambda
()=>{Console.WriteLine("....");};
//如果方法体代码只有一句,如上还可省去方法体大括号
()=>Console.WriteLine("....");
private string A2(int a, int b)
  {
   return String.Format("{0}+{1}={2}", a, b, a + b);
  }
  //如上示例可简化为
  (a,b)=>{return String.Format("{0}+{1}={2}", a, b, a + b);}
  //因为方法体只有一句,可进一步简化
  (a,b)=> String.Format("{0}+{1}={2}", a, b, a + b);
  //此时注意return应该去掉,C#编译器自动识别=>做返回值
private string A3(int a)
  {
   return String.Format("{0}", a);
  }
  //上面示例可简化为
  (a)=>String.Format("{0}", a);
  //如果参数列表只有一个参数,参数列表的()可以去掉,上面进一步简化为
  a=>String.Format("{0}", a);

通过这篇文章你可能已经意识到在C#中,方法、委托、匿名方法,lambda表达式并无明显区分边界,它们之间可以灵活转化。在实际开发中关于委托的知识点非常多,如委托与事件。如果时间允许,希望能把委托深化的文章写一下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# C#  # 匿名委托  # Lambda  # C#中Lambda表达式的用法  # C# lambda表达式原理定义及实例详解  # C# lambda表达式应用如何找出元素在list中的索引  # C#中方法的直接调用、反射调用与Lambda表达式调用对比  # 理解C#中的Lambda表达式  # 初步认识C#中的Lambda表达式和匿名方法  # C# Lambda表达式select()和where()的区别及用法  # 一句  # 有过  # 自动识别  # 意识到  # 只有一个  # 还可  # 能把  # 这篇文章  # 都用  # 两部分  # 变得更加  # 请参考  # 大家多多  # 计算出  # 返回值  # 变成了  # 在实际  # TwoNumberHandleMethodDelegate  # Worker  # args 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何快速生成高效建站系统源代码?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  如何确认建站备案号应放置的具体位置?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  如何在宝塔面板创建新站点?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  新三国志曹操传主线渭水交兵攻略  如何用JavaScript实现文本编辑器_光标和选区怎么处理  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  php结合redis实现高并发下的抢购、秒杀功能的实例  如何在阿里云通过域名搭建网站?  如何撰写建站申请书?关键要点有哪些?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel如何使用Vite进行前端资源打包?(配置示例)  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel如何使用Collections进行数据处理?(实用方法示例)  高端智能建站公司优选:品牌定制与SEO优化一站式服务  zabbix利用python脚本发送报警邮件的方法  黑客如何利用漏洞与弱口令入侵网站服务器?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  详解Android图表 MPAndroidChart折线图  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  非常酷的网站设计制作软件,酷培ai教育官方网站?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  iOS UIView常见属性方法小结  如何快速搭建FTP站点实现文件共享?  详解Huffman编码算法之Java实现  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel如何使用查询构建器?(Query Builder高级用法)  Android实现代码画虚线边框背景效果  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案