对于Predicate的理解

一、Predicate是什么?(注:以下摘自C#技术文档)

摘要:表示定义一组条件并确定指定对象是否符合这些条件的方法。

public delegate bool Predicate<in T>(T obj)。

参数:obj:要按照由此委托表示的方法中定义的条件进行比较的对象。

类型参数:T:要比较的对象的类型。

返回结果: 如果 obj 符合由此委托表示的方法中定义的条件,则为 true;否则为 false。

直接看不太容易理解,看一个例子:

           List<string> list = new List<string>();
           list.AddRange(new string[] { "ASP.NET课程","J2EE课程", "PHP课程", "数据结构课程" });
           Predicate<string> findPredicate = new Predicate<string>(IsBookCategory);
           List<string> bookCategory = list.FindAll(findPredicate);                                                
           static bool IsBookCategory(string str)
           {
              return str.EndsWith("课程") ? true : false;
           }  

个人理解:

Predicate委托的作用是正像摘要所说:表示定义一组条件并确定指定对象是否符合这些条件的方法。

即用委托的方式,指定了一个条件。

代码中:Predicate的实例findPredicate指向了方法IsBookCatagory(),这个方法定义了一个判定条件。

List<string> bookCategory = list.FindAll(findPredicate);   //FindAll()方法查找满足findPredicate指向的        
   条件。

时间: 2024-10-12 03:29:27

对于Predicate的理解的相关文章

MVC+EF 理解和实现仓储模式和工作单元模式

MVC+EF 理解和实现仓储模式和工作单元模式 原文:Understanding Repository and Unit of Work Pattern and Implementing Generic Repository in ASP.NET MVC using Entity Framework 文章介绍 在这篇文章中,我们试着来理解Repository(下文简称仓储)和Unit of Work(下文简称工作单元)模式.同时我们使用ASP.NET MVC和Entity Framework 搭

转:如何学习SQL(第二部分:从关系角度理解SQL)

转自:http://blog.163.com/[email protected]/blog/static/285720652010950825538/ 6. 从关系角度理解SQL 6.1. 关系和表 众所周知,我们目前所用的数据库,通常都是关系数据库.关系自然在其中处于关键位置.初学数据库原理的人可能会很困惑关系和表是什么联系,如果没有清楚的理解,很可能会认为关系这个概念没有实际意义,只会引起混淆.其实这两组概念只是由于理论界与技术界的着重点不同.前者需要用一个专业的.没有歧义的概念来进行理论探

C#Lambda表达式的理解:谓词方法 匿名方法 使用Lambda

Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式.所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to".Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块. 下面三个方法会帮你会容易理解到Lambda表达式的好处,

C#语法糖之第六篇: 泛型委托- Predicate&lt;T&gt;、Func&lt;T&gt;

今天继续分享泛型委托的Predicate<T>,上篇文章讲了Action委托,这个比Action委托功不一样的地方就是委托引用方法是Bool返回值的方法,Action为无返回值.首先我们看一下它的定义吧: 1 public delegate bool Predicate<T>(T obj); 从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明函数参数所引用

join时显示no join predicate原因分析以及解决办法

本位出处:http://www.cnblogs.com/wy123/p/6238844.html 最近遇到一个存储过程在某些特殊的情况下,效率极其低效, 至于底下到什么程度我现在都没有一个确切的数据,因为预期很快就可以查询出来结果的SQL,实则半个小时都出不来,后面会有截图 观察执行计划的时候发现中间有一步中出现一个类似如下非常规的连接提示警告,如下图 no join predicate 意思就是没有连接谓词,表之间join的时候没有指定连接谓词可以导致no join predicate, 但是

C#中的list的System.Predicate&lt;in T&gt;和System.Comparison&lt;in T&gt;的应用

public class Data { public int ma = 1; public int mb = 2; public int mc = 0; static int count = 0; public Data() { count++; ma = count; } } //一句话删除满足要求的集合 Asm.RemoveAll((Data md) => { return md.ma % 3 == 0 ? true : false; }); //等同于 Asm.RemoveAll(Need

深入理解pthread_cond_wait、pthread_cond_signal

===============================man pthread_cond_wait的解释========================== LINUX环境下多线程编程肯定会遇到需要条件变量的情况,此时必然要使用pthread_cond_wait()函数.但这个函数的执行过程比较难于理解. pthread_cond_wait()的工作流程如下(以MAN中的EXAMPLE为例): Consider two shared variables x and y, protected

深入理解Oracle的并行操作-转载

转载:http://czmmiao.iteye.com/blog/1487568 并行(Parallel)和OLAP系统 并行的实现机制是:首先,Oracle会创建一个进程用于协调并行服务进程之间的信息传递,这个协调进程将需要操作的数据集(比如表的数据块)分割成很多部分,称为并行处理单元,然后并行协调进程给每个并行进程分配一个数据单元.比如有四个并行服务进程,他们就会同时处理各自分配的单元,当一个并行服务进程处理完毕后,协调进程就会给它们分配另外的单元,如此反复,直到表上的数据都处理完毕,最后协

Func&lt;T&gt;,Action&lt;T&gt;,Predicate&lt;T&gt;使用小结

一.基本知识1.这三个都是.Net内置的泛型委托,方便我们直接使用,而不需要在使用委托时还要做如下定义 public delegate string GetName(string bookId); 2.Func<T>是有返回值的泛型委托,格式为Func<T1,T2,T..N,TResult>,T1,T2,T..N为多个参数,TResult为返回值 3.Ation<T>是没有返回值的泛型委托,格式为Action<T1,T2,T..N>,T1,T2,T..N为多