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();
    }
    }
    }
    复制代码
  • 相关阅读:
    65_磁盘文件的使用
    64_设备文件的使用
    63_json解析成map格式
    62_json文件解析成结构体格式
    61_map生成json的使用
    60_通过结构体生成json
    59_字符串的转换
    58_字符串的一些操作函数的使用
    57_recover的使用
    56_异常处理error,errors和painc的使用
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/3265681.html
Copyright © 2011-2022 走看看