关于Predicate<T>委托

来源:互联网 发布:java中传输的中文乱码 编辑:程序博客网 时间:2024/06/10 14:10

关于Predicate委托

Predicate<T>委托在.NET类类库中经常出现,此委托的定义如下:

public delegatebool Predicate<T>(T obj);

从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明

函数参数所引用的对象应满足的条件,条件满足时,函数返回true.

 

在类库中,List<T> 里面的 Find方法, 定义如下:

public T Find(Predicate<T> match);

那么我们可以在外部定义一个查找的规则方法。见以下示例代码:

namespace UsePredicateDelegate{    class MyClass    {        public int Value;        public string Information;    }    class Program    {        /// <summary>        /// 创建一个MyClass类型的对象集合        /// </summary>        /// <returns></returns>        private static List<MyClass> GetMyClassList()        {            List<MyClass> lst = new List<MyClass>();            Random ran = new Random();            MyClass obj = null;            for (int i = 0; i < 10; i++)            {                obj = new MyClass { Value = ran.Next(1, 100), Information = "object" + i.ToString() };                lst.Add(obj);            }            return lst;        }        /// <summary>        /// 打印一个MyClass对象集合的所有成员        /// </summary>        /// <param name="lst"></param>        private static void PrintList(List<MyClass> lst)        {            if (lst == null)                return;            foreach (MyClass obj in lst)                Console.WriteLine("Infomation={0},Value={1}", obj.Information, obj.Value);        }                static bool GreaterThan50(MyClass elem)        {            if (elem.Value > 50)                    return true;            return false;        }        static void Main(string[] args)        {            Predicate<MyClass> pred = GreaterThan50;            List<MyClass> lst = GetMyClassList();            Console.WriteLine("生成的MyClass对象集合为:");            PrintList(lst);           MyClass foundElement= lst.Find(pred);           if (foundElement != null)               Console.WriteLine("找到了符合条件的对象。Infomation={0},Value={1}", foundElement.Information, foundElement.Value);           else               Console.WriteLine("未找到符合条件的对象");            Console.ReadKey();        }    }}


原创粉丝点击