打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
3.7.1 理解Lambda表达式(1)

3.7.1 理解Lambda表达式(1)

2010-12-23 13:07 张昌龙/辛永平 机械工业出版社 字号:T | T

《ASP.NET 4.0从入门到精通》第3章C# 4.0语言特色,本章讨论在C# 4.0语言中许多增强的功能。首先介绍隐式类型声明,由编译器根据上下文进行类型推断,接下来讨论使用自动属性功能简化编写重复性的属性代码。对象初始化器可以简化开发人员的赋值代码,接下来讨论如何对一个现有类进行扩展的扩展方法。本节为大家介绍Lambda表达式。

AD:51CTO首届中国APP创新评选大赛正在招募>>

3.7   Lambda表达式

在C# 2.0中,引入了一个匿名方法的特性,使开发人员可以直接为委托添加方法语句块,而不需要显式地创建一个单独的方法。在C# 4.0中,提供了一个更加简法的方法来处理.NET中的委托类型,即Lambda表达式。

3.7.1   理解Lambda表达式(1)

【范例3.21】为了更好地讲述Lambda表达式以便于理解,在本小节同样先创建一个控制台应用程序,命名为LambdaDemo。在本示例中,首先举一个匿名方法的例子,然后看看Lambda表达式是如何声明并简化匿名方法的代码的。

首先举一个传统的使用委托的例子。在泛型List中,有一个重载的FindAll方法,该方法的一个重载版本接受一个谓词委托,也就是一个用一个委托作为参数,开发人员需要创建一个单独的方法来传递给FindAll方法,以便对List中的每个项进行判断。示例代码如下所示:

  1. 01  using System;  
  2. 02  using System.Collections.Generic;  
  3. 03  using System.Linq;  
  4. 04  using System.Text;  
  5. 05  namespace LambdaDemo  
  6. 06  {  
  7. 07     class Program  
  8. 08     {  
  9. 09         static void Main(string[] args)  
  10. 10         {  
  11. 11              Console.WriteLine("传统的委托代码示例, 运行结果为:");  
  12. 12              FindListDelegate();  
  13. 13         }  
  14. 14          //传统的调用委托的示例  
  15. 15          static void FindListDelegate()  
  16. 16          {  
  17. 17               //先创建一个泛型的List类  
  18. 18              List<string> list = new List<string>();  
  19. 19              list.AddRange(new string[] {"语言书", 
    "软件书","政治","图书","开发人员"});  
  20. 20              Predicate<string> findPredicate = new 
    Predicate<string>(IsBookCategory);  
  21. 21              List<string> bookCategory = list.
    FindAll(findPredicate);  
  22. 22              foreach (string str in bookCategory)  
  23. 23              {  
  24. 24                  Console.WriteLine("{0}\t", str);  
  25. 25              }  
  26. 26          }  
  27. 27          //谓词方法, 这个方法将被传递给FindAll方法进行书籍分类的判断  
  28. 28          static bool IsBookCategory(string str)  
  29. 29          {  
  30. 30               return str.EndsWith("书") ? true : false;  
  31. 31          }  
  32. 32     }  
  33. 33  } 

【代码解析】在这段代码中,为Predicate<string>委托创建了一个单独的方法IsBookCategory,这个方法判断字符串中是否以“书”这个字符结尾,如果是,则表示符合查询的要求,否则将进行排除。这段代码的运行效果如图3.18所示。

 
(点击查看大图)图3.18   传统的委托方法的运行示例
下面演示一下使用匿名方法来简化对传统委托的代码构建过程,这里添加一个新的方法FindListAnonymousMethod。这个方法的代码如下所示:
  1. //使用匿名方法来进行搜索过程  
  2. static void FindListAnonymousMethod()  
  3. {  
  4.      //先创建一个泛型的List类  
  5.      List<string> list = new List<string>();  
  6.      list.AddRange(new string[] {"语言书", "软件书", "政治", "图书", "开发人员" });  
  7.      //在这里, 使用匿名方法直接为委托创建一个代码块, 而不用去创建单独的方法  
  8.      List<string> bookCategory = list.FindAll  
  9.           (delegate(string str)  
  10.           {  
  11.                return str.EndsWith("书") ? true : false;  
  12.           }  
  13.           );  
  14.       foreach (string str in bookCategory)  
  15.       {  
  16.           Console.WriteLine("{0}\t", str);  
  17.       }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
匿名方法---将代码块作为参数传递给委托 - さびしい.Net/Java技术与技巧 - C...
到现在为止你还未触碰LINQ,那进来吧 —— LINQ入门(中篇)
基础知识---委托和 lambda
F
Java中的Lambda表达式
Java|Java8 新特性
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服