• 关于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();
    }
    }
    }
    复制代码
  • 相关阅读:
    正则表达式和re模块
    面向对象基础
    面向对象高级
    网络编程
    collectiontimeossysjson模块
    继承
    封装
    我在吃饭
    111
    关于羽毛球拍
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/3265681.html
Copyright © 2020-2023  润新知