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);
时间: 2024-12-29 01:19:20

C#的泛型委托Predicate/Func/Action的相关文章

泛型委托 Predicate/Func/Action

Predicate 泛型委托  表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素.看看下面它的定义: // Summary:    //     Represents the method that defines a set of criteria and determines whether    //     the specified object meets those criteria.    ////

C#语法糖之第六篇: 泛型委托- Predicate&lt;T&gt;、Func&lt;T&gt;

今天继续分享泛型委托的Predicate<T>,上篇文章讲了Action委托,这个比Action委托功不一样的地方就是委托引用方法是Bool返回值的方法,Action为无返回值.首先我们看一下它的定义吧: 1 public delegate bool Predicate<T>(T obj); 从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明函数参数所引用

Java实现泛型委托类似C#Action&lt;T&gt;

一.C# Action<T> 泛型委托(帮助理解委托) 描述: 封装一个方法,该方法只采用一个参数并且不返回值. 语法: public delegate void Action<T>(T arg); T: 参数类型:此委托封装的方法的参数类型 arg: 参数:此委托封装的方法的参数 备注: 通过此委托,可以将方法当做参数进行传递.Action<T> 泛型委托:封装一个方法,该方法只采用一个参数并且不返回值.可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托.该

系统内置委托:Func/Action

lSystem.Func 代表有返回类型的委托 lpublic delegate TResult  Func<out TResult>(); lpublic delegate TResult  Func<in T, out TResult>(T arg); l...... l注:输入泛型参数-in 最多16个,输出泛型参数 -out 只有一个. lSystem.Action 代表无返回类型的委托 lpublic delegate void Action<in T>(T

C#内置泛型委托:Func委托

1.什么是Func委托 Func委托代表有返回类型的委托 2.Func委托定义 查看Func的定义: using System.Runtime.CompilerServices; namespace System { // // 摘要: // 封装一个方法,该方法具有两个参数,并返回由 TResult 参数指定的类型的值. // // 参数: // arg1: // 此委托封装的方法的第一个参数. // // arg2: // 此委托封装的方法的第二个参数. // // 类型参数: // T1:

c#中的泛型委托(@WhiteTaken)

今天学习一下c#中的泛型委托. 1.一般的委托,delegate,可以又传入参数(<=32),声明的方法为  public delegate void SomethingDelegate(int a); 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace delegate

C# 委托 (一)—— 委托、 泛型委托与Lambda表达式

C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此文可转载,然需明根以溯源. https://blog.csdn.net/wnvalentin/article/details/81840339 目录 1 委托的含义 2 委托声明.实例化和调用 2.1 委托的声明 2.2 委托的实例化 2.3 委托实例的调用 3 泛型委托 3.1 Func委托 3.2

系统内置的泛型委托

#region 系统内置的泛型委托 //只要是Action委托都是无返回值的. ////1.存储无参数无返回值的方法 //Action md = () => { Console.WriteLine("无参数无返回值."); }; //md(); //Console.Read(); ////2.有一个参数没有返回值 //Action<string, int> md = (s, i) => { Console.WriteLine(s + " "

C#委托(delegate、Action、Func、predicate)

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明   Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型.   例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型. (2). Action Action是无返回值的泛型委托. Action 表示无参,