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

posted @ 2020-05-29 11:43  delafqm  阅读(815)  评论(0编辑  收藏  举报