.NET (五)委托第五讲:内置委托Predicate

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

Predicate委托根据条件进行筛选,返回 是 或 否。

下面筛选客户名称,查询出以字母z开头的客户:

   class Class5
    {
        static void Main(String[] args)
        {
            Customer c1 = new Customer() { Name = "zhangsan", Age = 18 };
            Customer c2 = new Customer() { Name = "lisi", Age = 17 };
            Customer c3 = new Customer() { Name = "wangwu", Age = 20 };
            Customer c4 = new Customer() { Name = "xiaoming", Age = 10 };
            Customer c5 = new Customer() { Name = "zhangchao", Age = 25 };
            List<Customer> list = new List<Customer>();
            list.Add(c1);
            list.Add(c2);
            list.Add(c3);
            list.Add(c4);
            list.Add(c5);


            Predicate<Customer> predicate = new Predicate<Customer>(Choose);
            List<Customer> query = list.FindAll(predicate);


            ObjectDumper.Write(query);

        }


        public static  bool Choose(Customer c)
        {
            if (c.Name.StartsWith("z"))
            {
                return true;
            }
            return false;

        }
    }

List集合中的findAll方法接受一个Predicate委托类型。

匿名委托:

            //代码演进
            List<Customer> query = list.FindAll(delegate(Customer c)
            {
                if (c.Name.StartsWith("z"))
                {
                    return true;
                }
                return false;
            });

Lamada:

            List<Customer> query = list.FindAll((Customer c)=>
            {
                if (c.Name.StartsWith("z"))
                {
                    return true;
                }
                return false;
            });

总结:委托定义的是方法的类型。返回值和参数必须与方法相同。

.NET 为我们定义了4大内置委托,他们是:

Action:无返回值

Func: 有返回值

Comparison:返回整数,比较两个对象

Predicate:返回bool ,根据条件筛选

委托可以将方法作为参数传递,灵活使用委托可以让我们的程序更加简洁,结构清晰。

原文地址:https://www.cnblogs.com/gosky/p/6038810.html