• C#的泛型委托Predicate/Func/Action


    Predicate<T> 是一个委托,它代表了一个方法,它的定义是:

    namespace System {      
    // 摘要:    表示定义一组条件并确定指定对象是否符合这些条件的方法。    
    // 参数:      
    //   obj:    要按照由此委托表示的方法中定义的条件进行比较的对象。    
    // 类型参数:      
    //   T:    要比较的对象的类型。          
    // 返回结果:      
    //     如果 obj 符合由此委托表示的方法中定义的条件,则为 true;否则为 false。       
    public delegate bool Predicate<T>(T obj);
    }

    这个委托常被好多Array , List<T> 类的方法所使用,用来查找集合中的元素。

    简单地说,Predicate就是一个代表了接受一个T类型的参数,然后检查它是否满足某一规则然后返回 true 或者 false 的委托。示例如下:

    在这个例子中,我们使用Predicate 来告诉集合如何筛选,然后集合会处理整个重复筛选的过程。

    比如说,我们有一个 SprintBacklogItem 集合,想根据State==Closed 这一规则来进行筛选。我们就可以使用如下的一个方法:

       private bool HasStateClosed(SprintBacklogItem item)
    {
    if (item.State == SprintBackLogStatesStrings.CLOSED)
    return true;
    return false;
    }

    这个方法简单地检查了是否SprintBacklogItem's state is closed,然后返回true/false。现在如果我们观察一下这个方法的定义,

    就能够确认可以使用Predicate 委托来代表这个方法。下面这行代码就用 FindAll( ) 方法筛选出了所以关闭了的SprintBacklogItems

    List<SprintBacklogItem> closedItems= _SprintBackLogsItems.FindAll(HasStateClosed);

    Func():封装一个不具有参数但却返回 TResult 参数指定的类型值的方法。

    Func(T1, T2, TResult):封装一个具有两个参数并返回 TResult 参数指定的类型值的方法,没有T2就是封装一个具有参数并....。

    Action() Action(T1) Action(T2) : 封装一个方法,该方法指定数量的参数(如()无参数,(T1)一个参数,以此类推)并且不返回值。这个和Func有相似处,但无返回值而已。

    定义:

    delegate void Action<T>(T obj);

  • 相关阅读:
    51单片机寄存器组的设置(转)
    51单片机堆栈深入剖析(转)
    do{...}while(0)的妙用(转)
    优化C/C++代码的小技巧(转)
    Struts2返回json
    详略。。设计模式1——单例。。。。studying
    [深入理解Android卷一全文-第十章]深入理解MediaScanner
    《python源代码剖析》笔记 Python虚拟机框架
    jQuery Validation让验证变得如此easy(三)
    mysql高可用架构方案之中的一个(keepalived+主主双活)
  • 原文地址:https://www.cnblogs.com/sekon/p/4017651.html
Copyright © 2020-2023  润新知