C#委托基础6——泛型委托Predicate

简介:

 

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客。

 

此委托返回一个bool值,该委托通常引用一个"判断条件函数"。需要指出的是,判断条件一般为“外部的硬性条件”,比如“大于50”,而不是由数据自身指定,不如“查找数组中最大的元素就不适合”。

 

例一

class Program
{
        bool IsGreaterThan50(int i)
        {
            if (i > 50)
                return true;
            else
                return false;
        }

        static void Main(string[] args)
        {
            Program p=new Program();

            List<int> lstInt = new List<int>();
            lstInt.Add(50);
            lstInt.Add(80);
            lstInt.Add(90);

            Predicate<int> pred = p.IsGreaterThan50;
           
            int i = lstInt.Find(pred);                         // 找到匹配的第一个元素,此处为80
            Console.WriteLine("大于50的第一个元素为{0}",i);

           

            List<int> all = lstInt.FindAll(pred);
            for (int j = 0; j < all.Count(); j++)
            {
                Console.WriteLine("大于50的数组中元素为{0}", all[j]);  // 找出所有匹配条件的
            }

            Console.ReadLine();
        }
}

例二

class Staff
{
        private double salary;

        public double Salary
        {
            get { return salary; }
            set { salary = value; }
        }

        private string num;

        public string Num
        {
            get { return num; }
            set { num = value; }
        }

        public override string ToString()
        {
            return "Num......" + num + "......" + "......" + "Salary......" + salary;
        }
}

 

class Program
{
        bool IsSalaryGreaterThan5000(Staff s)
        {
            if (s.Salary > 5000)
                return true;
            else
                return false;
        }

        static void Main(string[] args)
        {
            Program p = new Program();

            List<Staff> allStaff = new List<Staff>
            {
                new Staff{Num="001",Salary=9999.9},
                new Staff{Num="002",Salary=8991},
                new Staff{Num="003",Salary=10000.8},
                new Staff{Num="004",Salary=4999.99}
            };

            Predicate<Staff> s = p.IsSalaryGreaterThan5000;
            Staff theFirstOne = allStaff.Find(s);
            Console.WriteLine(theFirstOne);              // 找出第一个

            List<Staff> all = allStaff.FindAll(s);
            for (int i = 0; i < all.Count(); i++)
            {
                Console.WriteLine(all[i]);              // 找出所有满足条件的
            }

            Console.ReadLine();
        }
}


本文参考自金旭亮老师的《.NET 4.0面向对象编程漫谈》有关代理的内容
目录
相关文章
|
设计模式
委托(一):委托与方法
   一,利用委托将方法作为方法的参数                 首先来看个小例子:               namespace 委托示例2 { /***** * 委托示例一 * 说明:此段程序主要是将委托作为方法的参数传入方法中,使得具体调用时再根据需要为方法赋值。
884 0
|
C# 程序员 容器
用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
       说明:本文章转载自:http://www.cnblogs.com/xcj26/p/3536082.html 这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力。
751 0
【转】委托、事件与匿名方法 — 学习委托最好的资料
http://www.cnblogs.com/r01cn/archive/2012/11/30/2795977.html
608 0