Predicate<T> 是一个委托,它代表了一个方法,它的定义是:

namespace System {      
// 摘要:    表示定义一组条件并确定指定对象是否符合这些条件的方法。    
// 参数:      
//   obj:    要按照由此委托表示的方法中定义的条件进行比较的对象。    
// 类型参数:      
//   T:    要比较的对象的类型。          
// 返回结果:      
//     如果 obj 符合由此委托表示的方法中定义的条件,则为 true;否则为 false。       
public delegate bool Predicate<T>(T obj);
}

这个委托常被好多Array , List<T> 类的方法所使用,用来查找集合中的元素。

简单地说,Predicate就是一个代表了接受一个T类型的参数,然后检查它是否满足某一规则然后返回 true 或者 false 的委托。示例如下:

在这个例子中,我们使用Predicate 来告诉集合如何筛选,然后集合会处理整个重复筛选的过程。

比如说,我们有一个 SprintBacklogItem 集合,想根据State==Closed 这一规则来进行筛选。我们就可以使用如下的一个方法:

   private bool HasStateClosed(SprintBacklogItem item)
{
if (item.State == SprintBackLogStatesStrings.CLOSED)
return true;
return false;
}

这个方法简单地检查了是否SprintBacklogItem's state is closed,然后返回true/false。现在如果我们观察一下这个方法的定义,

就能够确认可以使用Predicate 委托来代表这个方法。下面这行代码就用 FindAll( ) 方法筛选出了所以关闭了的SprintBacklogItems

List<SprintBacklogItem> closedItems= _SprintBackLogsItems.FindAll(HasStateClosed);

Func():封装一个不具有参数但却返回 TResult 参数指定的类型值的方法。

Func(T1, T2, TResult):封装一个具有两个参数并返回 TResult 参数指定的类型值的方法,没有T2就是封装一个具有参数并....。

Action() Action(T1) Action(T2) : 封装一个方法,该方法指定数量的参数(如()无参数,(T1)一个参数,以此类推)并且不返回值。这个和Func有相似处,但无返回值而已。

定义:

delegate void Action<T>(T obj);

最新文章

  1. 新版startssl 免费SSL证书申请 (实测 笔记 https http2 必要条件)
  2. beautifulSoup(1)
  3. MVC5:使用Ajax和HTML5实现文件上传功能
  4. 网上搜的一个shell中 中文设置的一个样例;
  5. iOS 架构模式-MVVM
  6. hadoop学习;hadoop伪分布搭建
  7. System.Web.UI.WebControls的Web服务器控件
  8. swift UITapGestureRecognizer获取点击事件点击的位置point
  9. MyBatis 配置的一些小知识点
  10. JXL组件生成报表报错(二)
  11. C++:greater&lt;int&gt;和less&lt;int&gt;
  12. 【WPF/C#】测试下载文件(图片)
  13. Linux下oracle11g 导入导出操作详细
  14. LeetCode OJ:Longest Increasing Subsequence(最长递增序列)
  15. linux 的 磁盘管理
  16. 制作Makefile中 ** missing separator 错误解决
  17. 使用css3属性transition实现页面滚动
  18. ethereum(以太坊)(一)
  19. Python中的单元测试模块Unittest快速入门
  20. Java Learning Path(五)资源篇

热门文章

  1. Pandas 数据读取
  2. 笔记-scrapy-item
  3. 如何将Windows live writer草稿转存到其他电脑上
  4. Android 数据库中的数据给到ListView
  5. RandomAecessFile open failed: EISDIR (Is a directory)
  6. laravel5.5http会话机制
  7. javascript类式继承模式#2——借用构造函数
  8. Delphi中的关键字与保留字
  9. python学习笔记一:数据类型
  10. Linq中Count()和Any()引发的效率问题