Predicate<T>委托在.NET类类库中经常出现,此委托的定义如下: public delegatebool Predicate<T>(T obj); 从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明 函数参数所引用的对象应满足的条件,条件满足时,函数返回true.
在类库中,List<T> 里面的 Find方法, 定义如下: public T Find(Predicate<T> match); 那么我们可以在外部定义一个查找的规则方法。见以下示例代码: [url=][/url]
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(); } }}
|