zoukankan      html  css  js  c++  java
  • 关于Predicate<T>委托

    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();
    }
    }
    }
    复制代码
  • 相关阅读:
    POJ3320 Jessica's Reading Problem
    POJ3320 Jessica's Reading Problem
    CodeForces 813B The Golden Age
    CodeForces 813B The Golden Age
    An impassioned circulation of affection CodeForces
    An impassioned circulation of affection CodeForces
    Codeforces Round #444 (Div. 2) B. Cubes for Masha
    2013=7=21 进制转换
    2013=7=15
    2013=7=14
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/3265681.html
Copyright © 2011-2022 走看看