C#委托基础6——泛型委托Predicate

简介:

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客。

此委托返回一个bool值,该委托通常引用一个"判断条件函数"。

需要指出的是,判断条件一般为“外部的硬性条件”,比如“大于50”,而不是由数据自身指定,不如“查找数组中最大的元素就不适合”。

例一

 
  1. class Program  
  2. {  
  3.         bool IsGreaterThan50(int i)  
  4.         {  
  5.             if (i > 50)   
  6.                 return true;  
  7.             else 
  8.                 return false;  
  9.         }  
  10.  
  11.         static void Main(string[] args)  
  12.         {  
  13.             Program p=new Program();  
  14.  
  15.             List<int> lstInt = new List<int>();  
  16.             lstInt.Add(50);  
  17.             lstInt.Add(80);  
  18.             lstInt.Add(90);  
  19.  
  20.             Predicate<int> pred = p.IsGreaterThan50;  
  21.             int i = lstInt.Find(pred);                         // 找到匹配的第一个元素,此处为80  
  22.             Console.WriteLine("大于50的第一个元素为{0}",i);  
  23.  
  24.             List<int> all = lstInt.FindAll(pred);  
  25.             for (int j = 0; j < all.Count(); j++)  
  26.             {  
  27.                 Console.WriteLine("大于50的数组中元素为{0}", all[j]);  // 找出所有匹配条件的  
  28.             }  
  29.             Console.ReadLine();  
  30.         }  
  31. }  
  32.  

例二

 
  1. class Staff  
  2. {  
  3.         private double salary;  
  4.  
  5.         public double Salary  
  6.         {  
  7.             get { return salary; }  
  8.             set { salary = value; }  
  9.         }  
  10.  
  11.         private string num;  
  12.  
  13.         public string Num  
  14.         {  
  15.             get { return num; }  
  16.             set { num = value; }  
  17.         }  
  18.  
  19.         public override string ToString()  
  20.         {  
  21.             return "Num......" + num + "......" + "......" + "Salary......" + salary;  
  22.         }  
  23. }  
  24.  
  25.  
  26. class Program  
  27. {  
  28.         bool IsSalaryGreaterThan5000(Staff s)  
  29.         {  
  30.             if (s.Salary > 5000)  
  31.                 return true;  
  32.             else 
  33.                 return false;  
  34.         }  
  35.  
  36.         static void Main(string[] args)  
  37.         {  
  38.             Program p = new Program();  
  39.  
  40.             List<Staff> allStaff = new List<Staff>  
  41.             {  
  42.                 new Staff{Num="001",Salary=9999.9},  
  43.                 new Staff{Num="002",Salary=8991},  
  44.                 new Staff{Num="003",Salary=10000.8},  
  45.                 new Staff{Num="004",Salary=4999.99}  
  46.             };  
  47.  
  48.             Predicate<Staff> s = p.IsSalaryGreaterThan5000;  
  49.             Staff theFirstOne = allStaff.Find(s);  
  50.             Console.WriteLine(theFirstOne);              // 找出第一个  
  51.              
  52.             List<Staff> all = allStaff.FindAll(s);  
  53.             for (int i = 0; i < all.Count(); i++)  
  54.             {  
  55.                 Console.WriteLine(all[i]);               // 找出所有满足条件的  
  56.             }  
  57.             Console.ReadLine();  
  58.         }  
  59. }  
  60.  

 本文参考自金旭亮老师的《.NET 4.0面向对象编程漫谈》有关代理的内容

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1071012如需转载请自行联系原作者


woshixuye111

相关文章
|
2月前
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
70 11
|
2月前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
108 7
|
3月前
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
61 4
|
3月前
|
C#
C#中的委托(一)
C#中的委托(一)
37 1
|
3月前
|
C# C++
C#语言进阶(一)—委托
C#语言进阶(一)—委托
44 0
|
3月前
|
C#
C# 面向对象编程(三)——接口/枚举类型/泛型
C# 面向对象编程(三)——接口/枚举类型/泛型
31 0
|
6月前
|
存储 安全 C#
C# - 委托与事件
这篇文档介绍了C#中的委托和事件。委托是存储方法引用的类型,支持回调、事件处理,具有引用方法、类型安全、多播性等特性,并在异步编程中发挥作用。事件是委托的封装,提供保护和订阅机制,防止外部直接访问。当需要在类内部控制方法调用,防止外部误触发时,可使用事件。
|
5月前
|
C#
C#||委托和事件的实例
C#||委托和事件的实例
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
188 3
|
5天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
16 3