这篇文章主要为大家详细介绍了C#匿名委托与Lambda表达式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

通过使用匿名委托(匿名方法),使编程变得更加灵活,有关委托与匿名委托请参考我的前一篇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表达式并无明显区分边界,它们之间可以灵活转化。在实际开发中关于委托的知识点非常多,如委托与事件。如果时间允许,希望能把委托深化的文章写一下。

更多相关文章

  1. asp.net mvc如何动态编译生成Controller的方法示例详解
  2. .NET Core2.0小技巧之MemoryCache问题修复解决的方法(图)
  3. .NET CORE如何动态调用泛型解决方法
  4. C#中关于静态与非静态方法的区别介绍
  5. C#中关于表达式树的简单介绍
  6. Rest在asp.net MVC下使用的方法介绍
  7. C#中String类型与json之间相互转换的实现方法
  8. .net core使用Redis发布订阅方法介绍
  9. C#中发送邮件的实现方法详解

随机推荐

  1. php跨域的几种方式
  2. 细数PHP中16个高危函数
  3. PHP 错误与异常的日志记录
  4. PHP中常用的18个字符串函数
  5. 给 PHP 开启 shmop 扩展实现共享内存
  6. php随机生成不在一个范围随机数
  7. php十进制转二进制不用函数
  8. 在 macOS 下使用 PHP-version 切换 PHP
  9. php生成短网址不重复
  10. PHP高性能Excel扩展1.2.8发布,文件读取数