C# 返回bool类型的内置委托—Predicate
3.1 初识Predicate
经过了Func的了解,我们可以知道接下来的这两个Predicate和Comparison其实都属于有返回值类型的委托,他们不过是两个具体的特殊实例而已(一个返回bool类型,一个返回int类型)。
MSDN给出的定义:表示定义一组条件并确定指定对象是否符合这些条件的方法。
它的定义很简单:(这里就不再对其进行解释了)
public delegate bool Predicate<in T>(T obj)
此委托由 Array 和 List<T> 类的几种方法使用,常用于在集合中搜索元素。
3.2 深入Predicate
由于Predicate委托常用于在集合中搜索元素,那么我们就来看看如何使用Predicate委托来进行元素的搜索。于是,我们将目光转到List集合的FindAll方法,相信大部分童鞋都用过这个方法。
(1)先来看看FindAll的定义:
// // 摘要: // 检索与指定谓词定义的条件匹配的所有元素。 // // 参数: // match: // System.Predicate<T> 委托,用于定义要搜索的元素应满足的条件。 // // 返回结果: // 如果找到,则为一个 System.Collections.Generic.List<T>,其中包含与指定谓词所定义的条件相匹配的所有元素;否则为一个空 // System.Collections.Generic.List<T>。 // // 异常: // System.ArgumentNullException: // match 为 null。 public List<T> FindAll(Predicate<T> match);
(2)再来看看FindAll的实现:
(3)现在我们来用一下Predicate委托:还是以那个PersonList集合为例,假如我们要筛选出Age>20的Person,我们就可以使用FindAll方法。现在我们来写一下这个委托:(后面我们会用Lambda表达式来简写,那才叫一个爽!)可以看出,关键点在于:delegate(Person p) { return p.Age > 20; }这一句上,传入参数是Person类型的对象,返回的是一个比较结果即bool值。
List<Person> personList = GetPersonList(); List<Person> agedList = personList.FindAll( new Predicate<Person>(delegate(Person p) { return p.Age > 20; } ) );
出处:http://edisonchou.cnblogs.com