• .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 ,根据条件筛选

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

  • 相关阅读:
    Java接口总结
    java面向对象特点总结
    二分查找的两种实现方法
    关于Java的对象equals方法
    java加密枝术是怎样的?
    Java中子类和父类间的调用关系
    Java中字符串的完美度
    Java源代码不编译到字节码文件
    java生成6位随机数
    Struts2中ModelDriven的使用
  • 原文地址:https://www.cnblogs.com/gosky/p/6038810.html
Copyright © 2020-2023  润新知